60分求助
查看原帖
60分求助
338374
Dolkx楼主2020/7/22 16:26
#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]进行排序

2020/7/22 16:26
加载中...