下面这张图从百度百科中转过来,一图胜百文。
下面部分自我理解编程方面的总结图。仅供参考
快速排序编程的中心思想 recursion 初始条件 低位 l=0 h=n 0 ... k N a[n] |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| tmp<---| a[h] >= tmp; h--; |<--------------------------| a[h] < tmp a[l] <= tmp; l++; |---------------------->| a[l] > tmp; ....... tmp------------------>| recursion(a, 0, k-1); recursion(a, k+1, n);
下面为函数实现
#include <stdio.h> int partitions(int a[],int low,int high) { int pivotkey=a[low]; while(low<high) { while(low<high && a[high]>=pivotkey) --high; a[low]=a[high]; while(low<high && a[low]<=pivotkey) ++low; a[high]=a[low]; } a[low]=pivotkey; return low; } void qsort(int a[],int low,int high) { int pivottag; if(low<high) { //递归调用 pivottag=partitions(a,low,high); qsort(a,low,pivottag-1); qsort(a,pivottag+1,high); } } void quicksort(int a[],int n) { qsort(a,0,n); } main() { int i,a[11]={0,11,12,5,6,13,8,9,14,7,10}; for(i=0;i<11;printf("%3d",a[i]),++i); printf("\n"); quicksort(a, 10); for(i=0;i<11;printf("%3d",a[i]),++i); printf("\n"); }