资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
/排序#include int partions(int l,int low,int high)int prvotkey=llow;l0=llow;while (lowhigh) while (low=prvotkey) -high; llow=lhigh; while (lowhigh&llow=prvotkey) +low; lhigh=llow;llow=l0;return low;void qsort(int l,int low,int high)int prvotloc;if(lowhigh) prvotloc=partions(l,low,high); /将第一次排序的结果作为枢轴 qsort(l,low,prvotloc-1); /递归调用排序 由low 到prvotloc-1 qsort(l,prvotloc+1,high); /递归调用排序 由 prvotloc+1到 highvoid quicksort(int l,int n)qsort(l,1,n); /第一个作为枢轴 ,从第一个排到第n个void main()int a11=0,2,32,43,23,45,36,57,14,27,39;for (int b=1;b11;b+)printf(%3d,ab);printf(n);quicksort(a,11);for(int c=1;c0 & m4) system(cls); printf(tt*n); printf(tttt 排序方法选择n); printf(tt*n); printf(ttt请选择排序算法:1直接插入排序 n); printf(ttt请选择排序算法:2希尔排序 n); printf(ttt请选择排序算法:3冒泡排序 n); printf(ttt请选择排序算法:4快速排序n); printf(ttt请选择排序算法:5简单选择排序n); scanf(%d,&n); switch(n) case 1: printf( 直接插入排序前:n); for( j=1;jnumv;j+) printf(%d ,am-1j); printf( n直接插入排序结果为:n); BiInsertsort(am-1,numv-1); break; case 2: printf( n希尔排序前:n); for( j=1;jnumv;j+) printf(%d ,am-1j); printf( n希尔排序结果为:n); ShellSort(am-1, numv-1); break; case 3: printf( n冒泡排序前:n); for( k=1;knumv;k+) printf(%d ,am-1k); printf( n冒泡排序结果为:n); BubbleSort(am-1, numv-1); break; case 4: printf( n快速排序前:n); for( j=1;jnumv;j+) printf(%d ,am-1j); printf( n快速排序结果为:n); QuickSort(am-1,0,numv-1); for( i=1;inumv;i+) printf(%d ,am-1i); printf(n); break; case 5: printf( n简单选择排序前:n); for( j=1;jnumv;j+) printf(%d,am-1j); printf( n简单选择排序结果为:n); SelectSort(am-1,numv-1); break; default: printf(输入错误!); system(pause);/等待 m=0; system(cls); printf(tt*n); printf(tttt 排 序n); printf(tt*n); printf(ttt请选择测试数据类型:1正序 n ); printf(ttt请选择测试数据类型:2逆序n ); printf(ttt请选择测试数据类型:3随机n ); printf(ttt返回,请按4n ); printf(tt*n); scanf(%d,&m); if(m=4) printf(*_*) 再见!); else printf(输入错误!);二、排序方法选择void BiInsertsort(int r, int n) /插入排序(折半) for(int i=2;i=n;i+) if (riri-1) r0 = ri; /设置哨兵 int low=1,high=i-1; /折半查找 while (low=high) int mid=(low+high)/2; if (r0high;j-) rj+1 = rj; /后移 rj+1 = r0; for(int k=1;k=1;d=d/2) /以d为增量进行直接插入排序 for (int i=d+1;i0 & r0rj; j=j-d) rj+d = rj; /记录后移d个位置 rj+d = r0; for(int i=1;i=n;i+) printf(%d ,ri); printf(n);/*起泡排序*/void BubbleSort(int r, int n) int temp,exchange,bound; exchange=n; /第一趟起泡排序的范围是r0到rn-1 while (exchange) /仅当上一趟排序有记录交换才进行本趟排序 bound=exchange; exchange=0; for (int j=1; jrj+1) temp=rj; rj=rj+1; rj+1=temp; exchange=j; /记录每一次发生记录交换的位置 for(int i=1;i=n;i+) printf(%d ,ri); printf(n);int Partition(int r, int first, int end) /快速排序一次划分 int i=first;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号