60分求助
查看原帖
60分求助
1451342
Monkeymonk2006楼主2024/10/7 21:58
#include <iostream>
#include <cstdlib> // 包含 rand() 和 srand()
#include <ctime>   // 包含 time()
using namespace std;
int num[100002];

int getRandom(int l, int r)
{
    
    int x, y, z;
    x = rand() % (r - l + 1) + l;
    y = rand() % (r - l + 1) + l;
    z = rand() % (r - l + 1) + l;
    while (num[x] < num[y] || num[y] < num[z])
    {
        if (num[x] < num[y])
        {
            swap(x, y);
        }
        if (num[y] < num[z])
        {
            swap(z, y);
        }
    }
    return y;
}

void qsort(int left, int right)
{
    if (left>=right)
    {
        return;
    }
    int standard;
    int r = getRandom(left, right);
    swap(num[r], num[right]);
    standard = num[right];
    int index = left-1;
    for (int i = left; i < right; i++)
    {
        if (num[i]<=standard)
        {
            swap(num[i], num[index + 1]);
            index++;
        }
        
    }
    swap(num[right], num[index + 1]);
    index++;
    qsort(left, index - 1);
    qsort(index + 1, right);
}

int main()
{
    srand(time(NULL));
    int n; cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> num[i];
    }
    qsort(0, n - 1);
    for (int i = 0; i < n; i++)
    {
        cout << num[i] << " ";
    }
}
2024/10/7 21:58
加载中...