c++ - 快速排序最坏情况的提示

标签 c++ quicksort

我正在尝试实现快速排序并找出最坏情况下的处理部分。当 pivot 选择数组中最大或最小的元素时,我卡在了我的算法中间,不知道如何处理它。

#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 正在处理要交换的值的本地拷贝;它不会对参数进行任何更改。

关于c++ - 快速排序最坏情况的提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28732713/

相关文章:

algorithm - 在算法分析中, "for some constant c"究竟是什么意思呢? (例如,快速排序)

c++ - 如何重构这个 while 循环以摆脱 "continue"?

c++ - 当数组中的类元素被修改时,它的行为就像是一个拷贝,而不是引用

c# - 从非托管代码 : SAFEARRAY 调用托管 COM

c++ - 定义未命名的类成员函数?

c++ - 大表的快速排序非常慢

sorting - 在 vb6 中对数组的数组进行排序的更快方法

c++ - 如果作为参数传递的仿函数不带参数,则启用模板

c++ - quickSort 段错误(核心已转储)

c - 使用插入排序和快速排序