快速排序法思想:
把数组当作一个数值列表。排序开始时,它选择列表的中间值作为列表分隔符(list separator)。于是排序把列表分成两个列表,一个列表的值小于列表分隔符,另一个列表大于或者等于列表分隔符。然后排序在两个列表中递归调用自身。排序没调用自身一次。它就把元素分成更小的列表。
快速排序法实现:
#include <stdio.h>
int quick_sort(int arry[], int first, int last);
int print(int arry[],int size);
int main()
{
int arry[12] = {12,11,10,9,8,7,6,5,4,3,2,1};
print(arry,12);
quick_sort(arry,0,11);
print(arry,12);
getchar();
return 0;
}
int print(int arry[], int size)
{
printf("the arry[] is:");
for(int i = 0; i < size; i++)
printf("%d ",arry[i]);
printf("/n");
return 0;
}
int quick_sort(int arry[], int first, int last)
{
int temp, low, high,list_separator;
low = first;
high = last;
list_separator = arry[(first + last)/2];
do
{
while(arry[low] < list_separator)
low++;
while(list_separator < arry[high])
high--;
if(low <= high)
{
temp = arry[low];
arry[low++] = arry[high];
arry[high--] = temp;
}
}while(low <= high);
if(first < high)
quick_sort(arry,first,high);
if(low < last)
quick_sort(arry,low,last);
return 0;
}
输出结果:
the arry[] is: 12 11 10 9 8 7 6 5 4 3 2 1
the arry[] is: 1 2 3 4 5 6 7 8 9 10 11 12