选择不同的枢轴
Choosing Different Pivot
本文关键字:选择 更新时间:2023-10-16
当我选择列表的第一个元素 pivot 时,这段代码有效,但例如我想让最后一个元素透视,我想在这个代码中进行最小的更改,所以我在 pivot=arr[low] 之前添加了 swap(arr[high],arr[low]( 我只是将低的值更改为高。但是程序停止运行。我不知道为什么这不起作用。
int partition(int low, int high, int arr[])
{
int pivot = arr[low];
int i = low;
for (int j = low + 1; j <= high; ++j)
{
if (arr[j] < pivot)
{
++i;
swap(arr[j], arr[i]);
}
}
swap(arr[low], arr[i]);
return i;
}
void quickSort(int low, int high, int arr[])
{
if (low < high)
{
int pivot = partition(low, high, arr);
quickSort(low, pivot, arr);
quickSort(pivot + 1, high, arr);
}
}
我只是将低的值更改为高
如果您的意思是进行了此更改:
int pivot = arr[high]; // was arr[low]
然后需要在其他地方更新代码。典型的洛穆托分区方案示例:
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);
}
}
相关文章:
- 如何使用默认参数等选择模板专业化
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 选择要调用的构造函数
- C++选择排序算法中的逻辑错误
- QTreeView幻灯片多选后无法使用单击选择
- 无法获取菜单选择以运行函数.C++
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 在C++中,如何通过几种类型从元组中选择多个元素
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 对可变参数使用声明.如何选择正确的功能
- 选择选举获胜者的程序
- 如何选择在 csv 文件中输出的位置
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 选择和修改嵌套向量中的条目的最佳实践
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 在运行时选择父类的实现
- 数数并选择 sqlite 中的前三名
- 列表视图更改选择颜色