随机产生100000个1-100的数,分别使用冒泡排序和插入排序两种算法实现从小到大,测时间复杂度?

如题所述

随机产生一个十万个随机数的数组,要进行比较的话,每次产生的数组应该是完全一样的。才有比较的价值。分别写好冒泡排序和插入排序两种算法的函数,并使用程序计时的工具进行计时,总的说来,他们的时间复杂度接近,插入排序的时间复杂度略好一点。

#include<iostream>

#include<iomanip>

#include<time.h>

using namespace std; //随机数函数头文件

void main()

{

void sort1(int *);//冒泡法函数

void sort2(int *);//快速排序法

int i;

int a[1000];

srand(time(0)); //调用随机数

for(i=0;i<1000;i++)

a[i]=1+rand()%1000; //随机数的使用方法

}

int q;

cout<<"1--冒泡法\n"<<"2--快速排序法\n";

cout<<"请选择:";

cin>>q;

cout<<"排序后的结果为:\n";

switch(q)

{

case 1:

sort1(a);

temp=a[j];

a[j]=a[j-1];

a[j-1]=temp;

} //冒泡部分

for(i=0;i<1000;i++)

cout<<setw(5)<<a[i];//为了使输入的数据对齐

t++;

if(t%16==0) //每输出15个数换行

k=i; //把第一个数的下标赋给k

for(j=i+1;j<1000;j++)//比较出最小的(出了第一个数)

if (a[j]<a[k])

k=j; //把比第一个数小的数的下标依此赋给k

t=a[i];a[i]=a[k];a[k]=t;//把最小的数与第一个数交换

for(i=0;i<1000;i++)

{

cout<<setw(5)<<a[i];//为了使输入的数据对齐

m++;

if(t%16==0) //每输出15个数换行

cout<<endl;

m=1;

}

扩展资料:

冒泡排序算法的原理如下: 

比较相邻的元素。如果第一个比第二个大,就交换他们两个。 

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

参考资料来源:百度百科-冒泡排序

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-06-13
随机产生一个十万个随机数的数组,要进行比较的话,每次产生的数组应该是完全一样的。才有比较的价值。分别写好冒泡排序和插入排序两种算法的函数,并使用程序计时的工具进行计时,总的说来,他们的时间复杂度接近,插入排序的时间复杂度略好一点。本回答被网友采纳