void quickSort(int a[], int i, int j)
{
if (i >= j)
return;
int left = i;
int right = j;
//基准值
int stand = a[i];
while (i < j)
{
while (stand <= a[j] && i < j)
{
j--;
}
//j位 比 stand 小
a[i] = a[j];
while (a[i] <= stand && i < j)
{
i++;
}
//i位 比 stand 大
a[j] = a[i];
}
//填进去
a[i] = stand;
//移到中间了 左边都小于a[i],右边都大于a[i]
quickSort(a, left, i - 1);
quickSort(a, i + 1, right);
}
头部是基准数
两个位置i,j:j--,直到j指向的值比基准小,那么a[i] = a[j] j停在这里 值赋给i位置
然后 i++,直到 指向的值比基准大,那么a[j] = a[i], i停在这里,值赋值j的位置
直到 i==j 停下这次循环,当前i位置前面都是小于基准的,后面都是大于基准的, 此位置赋值为基准a[i] = stand
然后两边 继续执行上述操作
18万+

被折叠的 条评论
为什么被折叠?



