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