----------------------------------------- * 题目;快速排序 * 描述;快速排序对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要 排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部 分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序 ,整个排序过程可以递归进行,以此达到整个数据变成有序序列. * 作者;刘柏燊 * 日期;2008年9月7日 ------------------------------------------ #include<stdio.h> #include<time.h> #define size 10 int partition(int *,int,int); int quicksort(int *,int,int); void print(int *,int); --------------------------- *函数说明;打印数组函数 --------------------------- void print(int *c,int s) { int i; for(i=0;i<s;i++) printf("%d ",c[i]); printf("/n"); } ------------------------ * 函数说明;快速排序函数 ------------------------ int partition(int *a,int low,int high) { int ak,l_hold,h_hold;*ak放数组元素,k放下标* ak=a[low]; *把一个数组元素定位于最终为位置,这里设定为从第一个元素开始,《1》* l_hold=low; *把左边下标赋值* h_hold=high; *把右边下标赋值* while(low<high) *测试是否左边的小下标小于右边的大下标,否则退出比较* { while(low<high && a[high]>=ak) *确定最终定位的元素小于它右边的元素* high--; *依次比较* if(low!=high) *保证低位下标不等于高位下标的时候,对他们进行互换,并且低位下标+1,《2》* { a[low]=a[high]; low++; } while(low<high && a[low]<=ak) *同上* low++; if(low!=high) { a[high]=a[low]; high--; } } a[low]=ak; *《3》注意,这里有三个语句是我们经常看到的语句,上面注释里面标有《1》《2》《3》。就是一般的替换语句* ak=low; *准备传递low* low=l_hold; *同上* high=h_hold; if(low<ak) partition(a,low,ak-1); if(high>ak) partition(a,ak+1,high); } ---------------------- * 函数说明;调用其他函数并且创造数据的主函数 ----------------------- int main() { int arry[size]; int i,j; srand(time(NULL)); for(i=0;i<size;i++) arry[i]=rand()%100+1; *创造随机比较数* print(arry,size); *打印* partition(arry,0,size-1); *进入快速排序函数* print(arry,size); return 0; } 说明,把所有的“-”换成注释符,在* 前面和后面加一'/',就可以运行了,因为注释符不能被网页代码通过,所以改 变了表示方法。方便自己看。 运行结果;