簡體   English   中英

快速排序實施最壞情況的提示

[英]Tip for worst case of quicksort implementation

我正在嘗試實現快速排序,並找出最壞情況下的處理部分。 當數據透視表選擇數組中元素的最大或最小時,我陷入了算法的中間,不知道如何處理它。

#include <iostream>

void swap(int item1, int item2)
{
    int temp = item1;
    item1 = item2;
    item2 = temp;
}

int partition(int array[], unsigned int left, unsigned int right)
{
    int pivot = array[left];
    int pivot_index = left;

    for(++left, right; left <= right;)
    {
        if(array[left] >= pivot && array[right] < pivot)
            swap(array[left], array[right]);

        if(array[left] < pivot)
            left++;
        if(array[right] >= pivot)
            right++;
    }

    swap(array[right], pivot_index); 

    return right;
}

void quicksort(int array[], unsigned int left, unsigned int right)
{
    if(left < right)
    {
        int index = partition(array, left, right);
        quicksort(array, 0, index - 1);
        quicksort(array, index + 1, right);
    }
}

int main()
{
    int unsortedarray[] = {10, 0, 9, 3, 4, 5, 8, 1};
    int length = sizeof(unsortedarray) / sizeof(int);

    quicksort(unsortedarray, 0, length - 1);

    for(unsigned int index = 0; index < static_cast<unsigned int>(length); ++index)
        std::cout << unsortedarray[index] << std::endl;

    return 0;
}

您的swap正在使用要交換的值的本地副本; 它沒有對參數進行任何更改。

暫無
暫無

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

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