在C ++中快速排序。几乎正确,但结果有所改变

时间:2018-12-06 02:25:02

标签: c++ algorithm sorting quicksort

我用C ++进行了快速排序,但效果不佳。例如,如果我有一个{5、3、4、6、7}数组,则结果将为{0、3、4、5、6}。我找不到原因,因为我之前在Pascal中使用了相同的方法,而且效果很好。

#include <iostream>
using namespace std;

void qsort(int (&ary)[10000], int l, int r){
    int i = l, j = r, mid = ary[(l + r) / 2];
    while (i <= j){
        while (ary[i] < mid) i ++;
        while (ary[j] > mid) j --;
        if (i <= j){
            int temp = ary[i];
            ary[i] = ary[j];
            ary[j] = temp;
            i ++; j --;
        }
    }
    if (i < r) qsort(ary, i, r);
    if (l < j) qsort(ary, l, j);
}

int main(){
    int n;
    int a[10000];
    cin >> n;
    for (int i = 0; i < n; i ++){
        cin >> a[i];
    }
    qsort(a, 0, n);
    for (int i = 0; i < n; i ++){
        cout << a[i] << ' ';
    }
    return 0;
}

1 个答案:

答案 0 :(得分:-1)

第27行:应该是 qsort(a, 0, n-1);