下面这张图从百度百科中转过来,一图胜百文。
下面部分自我理解编程方面的总结图。仅供参考
快速排序编程的中心思想
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");
}