1、算法思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
2、执行流程
(a)一趟排序的过程
(b)排序的全过程
3、算法代码
void qickSort(int a[], int l, int r)//待排序数据存在a[]中
{
int i = l, j = r;
int temp;
if (l < r)
{
temp = a[l];
while (i != j)//完成一趟排序
{
while (j > i && temp < a[j])//从右往左扫描找到一个小于temp的元素
--j;
if (i < j)
{
a[i] = a[j];
++i;
}
while (i < j && a[i] < temp)//从左往右扫描找到一个大于temp的元素
++i;
if (i < j)
{
a[j] = a[i];
--j;
}
}
a[i] = temp;//将temp放到最终的位置
qickSort(a, l, i - 1);//递归地对temp左边的元素进行排序
qickSort(a, i + 1, r);//递归地对temp右边的元素进行排序
}
}