选择不同的枢轴

时间:2019-04-01 16:33:01

标签: c++ quicksort

当我选择数据透视表的第一个元素时,此代码有效,但是例如,我想使最后一个元素数据透视,并且我想在此代码中进行最小的更改,因此我在之前添加swap(arr [high],arr [low]) ivot = arr [low]我只是将low的值更改为high。但是程序停止运行。我不知道为什么这不起作用。

strings

1 个答案:

答案 0 :(得分:0)

  

我只是将low的值更改为high

如果您是说要进行此更改:

    int pivot = arr[high];     // was arr[low]

然后需要在其他地方更新代码。典型的lomuto分配方案示例:

int Partition(int arr[], int low, int high)
{
    int pivot = arr[high];
    int i = low;
    for (int j = low; j < high; ++j)
    {
        if (arr[j] < pivot)
        {
            std::swap(arr[j], arr[i]);
            ++i;
        }
    }
    std::swap(arr[i], arr[high]);
    return i;
}

void QuickSort(int arr[], int low, int high)
{
    if (low < high)
    {
        int pivot = Partition(arr, low, high);
        QuickSort(arr, low, pivot-1);
        QuickSort(arr, pivot + 1, high);
    }
}