#include <stdio.h> /* C: * 参照《数据结构》(C语言版) * 调用:quicksort-->qsort-->partitions * 原理,通过一趟扫描将要排序的数据分割成独立的两部分,* 其中一部分的所有数据都比另外一部分的所有数据都要小,* 然后再按此方法对这两部分数据分别进行快速排序,* 整个排序过程可以递归进行,以此达到整个数据变成有序序列 */ /* * arry : 待排数组 */ int partitions(int arry[],int low,int high) { int pivotkey=arry[low];//枢纽数,以a[low]为 while(low < high) { while(low < high && arry[high] >= pivotkey) --high;//先high前移直到小于枢纽 arry[low]=arry[high]; while(low < high && arry[low] <= pivotkey) ++low;//low后移直到大于枢纽 arry[high]=arry[low]; } //arry[low] = arry[0]; arry[low]=pivotkey; return low; } void qsort(int arry[],int high) { int pivottag; if(low<high) { //递归调用 pivottag=partitions(arry,low,high); qsort(arry,pivottag-1); qsort(arry,pivottag+1,high); } } //arry :待排数组 n:排序数目 //e.g. quicksort(arry,10); void quicksort(int arry[],int n) { qsort(arry,n-1); } int main (int argc,char* argv[]) { int i = 0; int arry[10] = {9,8,7,6,5,4,3,2,1,0}; for(i=0;i<10;i++)printf("%d\t",arry[i]); printf("\n"); quicksort(arry,10); for(i=0;i<10;i++)printf("%d\t",arry[i]); printf("\n"); }
原文链接:https://www.f2er.com/datastructure/383243.html