我写了一个新排序方法
  • 板块灌水区
  • 楼主chrispang
  • 当前回复20
  • 已保存回复20
  • 发布时间2024/4/8 21:43
  • 上次更新2024/4/9 11:25:41
查看原帖
我写了一个新排序方法
786127
chrispang楼主2024/4/8 21:43

以后大家别用冒泡排序了!

#include <iostream>
using namespace std;

int n, maxt, mint, maxi, mini, a[1000];
void one() {
    for (int i = 0, j = n - 1; i < j; i++, j--) {
        maxt = mint = a[i];
        maxi = mini = i;
        for (int r = i + 1; r < j; r += 2) {
            if (a[r] > a[r + 1]) {
                if (maxt < a[r]) maxt = a[r], maxi = r;
                if (mint > a[r + 1]) mint = a[r + 1], mini = r + 1;
            } else {
                if (maxt < a[r + 1]) maxt = a[r + 1], maxi = r + 1;
                if (mint > a[r]) mint = a[r], mini = r;
            }
        }
        swap(a[j], a[maxi]);
        if (mini == j) mini = maxi;
        swap(a[i], a[mini]);
    }
}

void two() {
    for (int i = 0, j = n - 1; i <= j; i++, j--) {
        maxt = a[i] > a[i + 1] ? a[i] : a[i + 1];
        mint = a[i] > a[i + 1] ? a[i + 1] : a[i];
        maxi = a[i] > a[i + 1] ? i : i + 1;
        mini = a[i] > a[i + 1] ? i + 1 : i;
        for (int r = i + 2; r < j; r += 2) {
            if (a[r] > a[r + 1]) {
                if (maxt < a[r]) maxt = a[r], maxi = r;
                if (mint > a[r + 1]) mint = a[r + 1], mini = r + 1;
            } else {
                if (maxt < a[r + 1]) maxt = a[r + 1], maxi = r + 1;
                if (mint > a[r]) mint = a[r], mini = r;
            }
        }
        swap(a[j], a[maxi]);
        if (mini == j) mini = maxi;
        swap(a[i], a[mini]);
    }
    if (a[n / 2] < a[n / 2 - 1]) swap(a[n / 2], a[n / 2 - 1]);
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];

    if (n % 2) one();
    else two();

    for (int i = 0; i < n; i++)
        cout << a[i] << " ";

    cout << endl;
    system("pause");
    return 0;
}
2024/4/8 21:43
加载中...