全RE了,求助
查看原帖
全RE了,求助
670533
spontenious楼主2023/3/27 08:52
#include<iostream>
using namespace std;
int a[100001]; int n = 0;
void swap(int  a, int  b)
{
    int temp = a;
    a = b;
    b = temp;
}
//选择第一个,中间,最后一个数字比较大小,把大小居中的数字作为主元。
int getPivot(int l, int r)
{
    int mid = (l + r) >> 1;
    if (a[l] > a[mid])
    {
        swap(a[l], a[mid]);
    }
    if (a[l] > a[r])
    {
        swap(a[l], a[r]);
    }
    if (a[mid] > a[r])
    {
        swap(a[r], a[mid]);
    }
    swap(a[mid], a[r - 1]);//把主元与倒数第二个数字交换,目的是比较时可以少比一个数。
    return a[r - 1];
}

void quicksort(int left, int right)
{
    if (left == right) return;
    int pivot, high, low;
    pivot = getPivot(left, right);
    high = right - 1;
    low = left;
    while (1)
    {
        while (a[--high] > pivot);
        while (a[++low] < pivot);
        if (high < low) break;
        else
        {
            swap(a[high], a[low]);
        }
    }
    swap(a[low], a[right - 1]);
    quicksort(left, low - 1);
    quicksort(low + 1, right);
}
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    quicksort(1, n);
    for (int i = 1; i <= n; i++)
    {
        cout << a[i] << " ";
    }
}
2023/3/27 08:52
加载中...