#include <algorithm>
#include <cstdio>
#include <cstdlib>
using namespace std;
int a[1000000], n;
int getRand(int l, int r)
{
return rand() % (r - l + 1) + l;
}
void quickSort(int a[], int l, int r)
{
int i = l, j = r, flag = a[getRand(l, r)];
while (i <= j)
{
while (a[i] < flag)
i++;
while (a[j] > flag)
j--;
if (i <= j)
swap(a[i++], a[j--]);
}
if (l < j)
quickSort(a, l, j);
if (i < r)
quickSort(a, i, r);
}
void inp()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
}
int main()
{
inp();
quickSort(a, 1, n);
for (int i = 1; i <= n; i++)
printf("%d ", a[i]);
puts("");
}
第24行中l到j的区间难道不是l到i的子集吗? 为什么不能 quickSort(a, l, i); 来对[l,i]进行排序