#include<stdio.h>
void quick_sort(int *array, int low, int high)
{
if (low >= high) //返回条件
{
return ;
}
int first = low;
int last = high;
int key = array[first];//首先要标记一个key,(这个key可以任意的位置,不是固定不变的,只是相对的中心位置)
while(first < last) //前面的first小于后面的last说明还没有结束一次的抽查。(头尾相等是结束的条件)
{
while(first < last && array[last] >key) //这是后面的一部分,本次是从小到大排序,所以假设(之所以假设是因为不确定key是否是哪个位置,便于理解先这么认为吧)先找到key后部分的,并且比key小的第一个值。
{
last --;
}
array[first] = array[last]; //将key后面的放到前面
while(first < last && array[first]<key) //同上
{
first++;
}
array[last] = array[first];
}
array[first] = key; //first和last是相等的处于当前的中间位置,所以参数写last也是一样的,
quick_sort(array,low,first-1); //因为是递归,所以重新开始,此时key是这个数组的相对中间分界线例如:5 9 4 key 10 15 12 ;(左边都小于右边的); 相当于排 5 9 4
quick_sort(array,first+1,high); //key右边部分 10 15 12 一直递归直到排完返回。
}
int main()
{
int i ;
int array[] = {23,45,78,12,9,80,1};
quick_sort(array,0,sizeof(array)/sizeof(int)-1);
for(i=0; i<sizeof(array)/sizeof(int); i++)
{
printf("%-3d",array[i]);
}
printf("\n");
return 0;
}
运行结果:
1 9 12 23 45 78 80
希望能帮助到你,由于时间原因我就没有给你们画上图,仅供参考。