印象里冒泡法排序好像比一般交换法排序的效率高,今天突然想写个小程序比较一下这两种算法的效率。思路是随机生成大容量数组,然后分别用两种算法进行排序,排序前后分别提取系统时间,然后对前后得到的系统时间作差得到排序所用的时间。
程序中顺便用了一下STL中的一个排序算法,奇怪的是效率出奇地高,不知道是我用错了还是真的那么高,如果哪位大虾发现问题请务必告知,感激不尽!代码如下:
- #include <iostream>
- #include <algorithm>
- #include <time.h>
- using namespace std;
- const size=60000;// 定义待排序数组大小
- bool init(int a[],int size) // 初始化
- {
- srand(time(0));
- for (int i=0;i<size;i++)
- {
- a[i]=rand();
- }
- return true;
- }
- bool sort1(int a[],int size) // 一般交换排序
- {
- for (int i=0;i<size-1;i++)
- {
- for (int j=i+1;j<size;j++)
- {
- if (a[i]>a[j])
- {
- int temp=a[i];
- a[i]=a[j];
- a[j]=temp;
- }
- }
- }
- return true;
- }
- bool sort2(int a[],int size) // 冒泡排序
- {
- for (int i=0;i<size-1;i++)
- {
- for (int j=size-1;j>i;j--)
- {
- if (a[j]<a[j-1])
- {
- int temp=a[j];
- a[j]=a[j-1];
- a[j-1]=temp;
- }
- }
- }
- return true;
- }
- void disp(int a[],int size)
- {
- for (int i=0;i<size;i++)
- {
- cout<<a[i]<<" ";
- }
- cout<<endl;
- }
- void main()
- {
- time_t begin_time,end_time;
- int a[size],b[size],c[size];
- init(a,size);
- init(b,size);
- init(c,size);
- cout<<"初始化完毕,开始排序……"<<endl;
- begin_time=time(NULL);
- sort1(a,size);
- end_time=time(NULL);
- cout<<"一般交换法用时"<<difftime(end_time,begin_time)<<"秒!"<<endl;
- begin_time=time(NULL);
- sort2(b,size);
- end_time=time(NULL);
- cout<<"冒泡法用时"<<difftime(end_time,begin_time)<<"秒!"<<endl;
- begin_time=time(NULL);
- sort(c,c+size);
- end_time=time(NULL);
- cout<<"STL的sort()用时"<<difftime(end_time,begin_time)<<"秒!"<<endl;
- // disp(c,size);
- }
当数组容量为60000时,执行结果如下:
结果与实际不符,我也不知道为什么。