{时间管理}语言各种排序方法及其所耗时间比较程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(时间管理)语言各种排序方法及其所耗时间比较程
序
#include
#include
#include
#include
#include
constintN=1000;//数据量,用于检测算法质量constintM=1000;//执行次数
//冒泡排序(递增)
voidBubblesort(intr[],intn)
{
intflag=1;//flag为0停止排序
for(inti=1;i { flag=0; for(intj=n-1;j>=i;j--) if(r[j] { intt=r[j]; r[j]=r[j-1]; r[j-1]=t; flag=1; } if(flag==0) return; } } //快速排序 voidquicksort(intr[],intleft,intright) { inti,j; intswap; i=left;j=right; swap=r[left]; while(i { while((i if(i { r[i]=r[j]; i++; } while((i if(i { r[j]=r[i]; j--; } } r[i]=swap; if(i>left) quicksort(r,left,i-1); if(i quicksort(r,i+1,right); return; } //堆排序先建立堆voidcreatheap(intr[],inti,intn) { intj; intt; t=r[i];j=2*i; while(j { if((j { r[i]=r[j]; i=j;j=2*i; } elsej=n; r[i]=t; } } //堆排序voidheapsort(intr[],intn) { intt; for(inti=n/2;i>=0;i--) creatheap(r,i,n); for(i=n-1;i>=0;i--) { t=r[0]; r[0]=r[i]; r[i]=t; creatheap(r,0,i-1); } return; } //二路归且 voidmerge(intr[],intr1[],intlow,intmid,inthigh)//进行二合壹的函数 { inti=low,j=mid+1,k=low; while((i<=mid)&&(j<=high)) { if(r[i]<=r[j]) r1[k++]=r[i++]; else r1[k++]=r[j++]; } while(i<=mid) r1[k++]=r[i++]; while(j<=high) r1[k++]=r[j++]; } voidmergepass(intr[],intr1[],intlength)//用来区分填入merge函数的变量计算式{ inti=0,j; while(i+2*length<=N) { merge(r,r1,i,i+length-1,i+2*length-1); i=i+2*length; if(i+length-1 merge(r,r1,i,i+length-1,N-1); else for(j=i;j r1[j]=r[j]; } voidmergesort(intr[])//二路且归总算法{ intlength=1; intr1[N+1]; while(length { mergepass(r,r1,length); length=2*length; mergepass(r1,r,length); length=2*length; } return; } //进行输出 voidprint(intr[],intn) for(inti=0;i<=n-1;i++) { if(i%10==0){cout< cout< } cout< } //主函数 voidmain() { inti,j,k; intr[N],a[N]; clock_tstart,finish; doubleduration; cout<<"请选择排序方式,1、冒泡法;2、快速排序法;3、堆排序法;4、二路且归法"< srand((unsigned)time(NULL)); for(i=0;i { a[i]=rand()%10000; }