1、i=i;j-)if(rjrj-1)intt=rj;rj=rj-1;rj-1=t;flag=1;if(flag=0)return;/快速排序voidquicksort(intr,intleft,intright)inti,j;intswap;i=left;j=right;swap=rleft;while(ij)while(ij)&(swaprj)j-;if(iri)i+;rj=ri;j-;ri=swap;if(ileft)quicksort(r,left,i-1);right)quicksort(r,i+1,right);/堆排序先建立堆voidcreatheap(intr,inti,intn)
2、intj;intt;t=ri;j=2*i;while(jn)if(jn)&(rjrj+1)j+;if(t=0;i-)creatheap(r,i,n);for(i=n-1;t=r0;r0=ri;creatheap(r,0,i-1);/二路归且voidmerge(intr,intr1,intlow,intmid,inthigh)/进行二合壹的函数inti=low,j=mid+1,k=low;=mid)&(j=high)if(ri=rj)r1k+=ri+;elser1k+=rj+;=mid)=high)voidmergepass(intr,intr1,intlength)/用来区分填入merge函数
3、的变量计算式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-1N-1)merge(r,r1,i,i+length-1,N-1);for(j=i;jN;j+)r1j=rj;voidmergesort(intr)/二路且归总算法intlength=1;intr1N+1;while(lengthN)mergepass(r,r1,length);length=2*length;mergepass(r1,r,length);/进行输出voidprint(intr,intn
4、)for(inti=0;=n-1;if(i%10=0)coutendl;coutrij;srand(unsigned)time(NULL);for(i=0;ai=rand()%10000;switch(j)case(1):冒泡法;start=clock();M;k=N-1;while(k+1)rk=ak;k-;Bubblesort(r,N);/冒泡法finish=clock();duration=(double)(finish-start)/1000;print(r,N);printf(%fsecondsn,duration);break;case(2):快速排序法quicksort(r,0,N-1);/快速排序法case(3):堆排序法heapsort(r,N);/堆排序法case(4):二路且归法mergesort(r);/二路且归法