对快速排序的一个问题
  • 板块灌水区
  • 楼主古巷青灯
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/7/17 14:35
  • 上次更新2023/10/27 19:53:36
查看原帖
对快速排序的一个问题
535591
古巷青灯楼主2022/7/17 14:35
#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 1e5 + 5;
int n;
int a[N];

void quick_sort(int l, int r) {
    if (l >= r) return;
    int mid = a[(l + r) >> 1];
    int i = l - 1, j = r + 1;
    while (i < j) {
        do i++; while (a[i] < mid);
        do j--; while (a[j] > mid);
        if (i < j) swap(a[i], a[j]);
    }
    quick_sort(l, j), quick_sort(j + 1, r);
}


signed main() {
    scanf("%lld", &n);
    for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
    quick_sort(1, n);
    for (int i = 1; i <= n; i++) printf("%lld ", a[i]);
    printf("\n");
    return 0;
}

为什么这个代码把 quick_sort(l, j), quick_sort(j + 1, r); 换成 quick_sort(l, i), quick_sort(i + 1, r);就不行了呢?

2022/7/17 14:35
加载中...