簡體   English   中英

快速排序取決於選擇數據透視

[英]Quicksort Depends on Choosing Pivot

這是我的快速排序算法,包括分區和交換。 當我選擇數組的最后一個元素作為樞軸時效果很好(在quicksort函數中: int r = partition(a, n, n); ),但在取第一個元素時失敗: int r = partition(a, n, s);

void Swap(int a[], int l, int r){
int tmp = a[l];
a[l] = a[r];
a[r] = tmp;
}

int partition(int a[], int n, int p) {
Swap(a, p, n);
int l = 0;
for (int i = 1; i <= n - 1; i++) {
    if (a[i] <= a[n]) {
        l += 1;
        Swap(a, l, i);
        }
    }
Swap(a, p, l + 1);
return l + 1;
}

void quicksort(int a[], int s, int n) {
if (s < n) {
    int r = partition(a, n, n);
    quicksort(a, s, r - 1);
    quicksort(a, r + 1, n);
    }
}

是的,問題出在partition程序上,這是正確的:

int partition(int a[], int p, int r) {
int t = a[r];
int i = p - 1;
for (int j = p; j < r;j++){
    if (a[j] <= t) {
        i += 1;
        std::swap(a[i], a[j]);
    }
}
std::swap(a[i + 1], a[r]);
return i + 1;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM