冒泡排序、选择排序、快速排序的比较
2016-01-11 23:55
323 查看
#include<stdio.h> #include<time.h> #include<conio.h> #include<string.h> int Qpc=0,Spc=0,Bpc=0; void BubbleSort(int* a,int LeftRange,int RightRange) { int i,j; for(i=0;i<=RightRange-1;i++) for(j=i+1;j<=RightRange;j++) { Bpc++; if(a[i]>a[j]) { int temp=a[i]; a[i]=a[j]; a[j]=temp; } } } void SelectionSort(int* a,int LeftRange,int RightRange) { int i,j,tempMin; for(i=LeftRange;i<=RightRange-1;i++) { tempMin=i; for(j=i+1;j<=RightRange;j++) { Spc++; if(a[j]<a[tempMin]) tempMin=j; } if(tempMin!=i) { int temp=a[i]; a[i]=a[tempMin]; a[tempMin]=temp; } } } void QuickSort(int* a,int LeftRange,int RightRange) //参考了MoreWindows老师的代码,见http://blog.csdn.net/morewindows/article/details/6684558 { if(LeftRange<RightRange) { int x=a[LeftRange],l=LeftRange,r=RightRange; //临时变量 while(l<r) { Qpc++; //从右到左搜索比x小的 while(l<r&&a[r]>=x) {r--; Qpc++;} if(l<r) {a[l++]=a[r]; Qpc++;} //从左到右搜索比x大的 while(l<r&&a[l]<=x) {l++; Qpc++;} if(l<r) {a[r--]=a[l]; Qpc++;} } a[l]=x; //此时l==r QuickSort(a,LeftRange,r-1); QuickSort(a,l+1,RightRange); //如果多线程可以同时进行 } } void Rand(int* a,int Range) //生成随机排序 { srand((unsigned)time(NULL)); int i,p; for(i=0;i<=Range;i++) a[i]=-1; for(i=0;i<=Range;i++) { do p=rand()%(Range+1); while(a[p]!=-1); a[p]=i; } } int main() { int a[10000],b[10000],c[10000]; int i; Rand(a,9999); memcpy(b,a,sizeof(a)); memcpy(c,a,sizeof(a)); for(i=0;i<=9999;i++) printf("%d ",a[i]); printf("\n随机排列已生成(共10000个数),按任意键开始测试排序\n"); getch(); clock_t zzzz,aaaa=clock(); SelectionSort(a,0,9999); zzzz=clock()-aaaa; for(i=0;i<=9999;i++) printf("%d ",a[i]); printf("\n【选择排序】比较次数:%d\n用时:%ldms\n\n",Spc,zzzz); printf("按任意键开始测试快速排序\n"); getch(); aaaa=clock(); QuickSort(b,0,9999); zzzz=clock()-aaaa; for(i=0;i<=9999;i++) printf("%d ",b[i]); printf("\n【快速排序】比较次数:%d\n用时:%ldms\n\n",Qpc,zzzz); printf("按任意键开始测试冒泡排序\n"); getch(); aaaa=clock(); BubbleSort(c,0,9999); zzzz=clock()-aaaa; for(i=0;i<=9999;i++) printf("%d ",c[i]); printf("\n【冒泡排序】比较次数:%d\n用时:%ldms\n\n",Spc,zzzz); return 0; }
冒泡排序和选择排序的比较次数是固定的,都是(9999+1)*9999/2=49995000,快速排序的比较次数数量级在10^5左右。
相关文章推荐
- 在命令行用 sort 进行排序
- 冒泡排序
- 快速排序
- 文件遍历排序函数
- C#选择排序法实例分析
- C#插入法排序算法实例分析
- C#实现Datatable排序的方法
- SQLSERVER的排序问题结果不是想要的
- Windows Powershell排序和分组管道结果
- C#冒泡法排序算法实例分析
- C#快速排序算法实例分析
- C#通过IComparable实现ListT.sort()排序
- C#选择法排序实例分析
- SQL学习笔记四 聚合函数、排序方法
- C#对list列表进行随机排序的方法
- jQuery拖动元素并对元素进行重新排序
- 将MySQL查询结果按值排序的简要教程
- 一根网线内的8根线哪4根是传输数据的,哪四根是防干扰的
- C++实现对输入数字组进行排序
- C#折半插入排序算法实现方法