快速排序与冒泡排序类似,都是基于交换排序的思想。
1)首先设定一个分界值,通过该分界值将数组分成左右两个部分
2)将大于分界值的数据集中到数组右边,小于分界值的数据集中在左边
3)然后左边和右边的数据可以独立排序,分别对左右边的数据组进行第1,2步操作(递归操作)
void quickSort(int *a, int left, int right)
{
if (left > right)
return;
int i, j, t, temp;
i = left;
j = right;
temp = a[left]; // 分界值(或基准数)
while (i != j)
{
// 顺序很重要,先从右往左找
while (a[j] >= temp && i < j)
--j;
while (a[i] <= temp && i < j)
++i;
if (i < j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
// 分界值归位:while(i!=j)结束之后,数组以下标 i 为分界点被分成左右两组
a[left] = a[i];
a[i] = temp;
quickSort(a, left, i - 1);
quickSort(a, i + 1, right);
}