快速排序算法:
1、先从数列中取随机取一个数作为基准数(一般取数列的第一个数)
2、分区过程,将比这个基准数大的数全放到它的右边,小于或等于它的数全放到它的左边
3、再对左右区间重复第二步,直到各区间只有一个数
快速排序图解
下面以数列{14,15,30,28,5,10}为例,演示它的快速排序过程(如下图)
分析第一趟排序:
首先选第一个数作为基准数,i = 0, j = n;
从j开始,由后往前找比基准数小的数:若找到,则a[i]=a[j];i++,从i开始往后找,找比基准数大的数,找到a[j]= a[i],直到i=j循环结束,不然重复以上步骤
源代码
int FindPos(int arr[], int low, int high)
{
int key = arr[low];
while(low < high)
{
while(low < high && arr[high] >= key)
high--;
arr[low] = arr[high];
while(low < high && arr[low] <= key)
low--;
arr[high] = arr[low];
}
arr[low] = key;
return low;
}
int quick_sort(int arr[], int low, int high)
{
if(low > high)
return 0;
int pos = FindPos(arr, low, high);
quick_sort(arr, low, pos-1);
quick_sort(arr, pos + 1, high);
return 1;
}