函数来选择用于快速排序的枢轴
Function to choose a pivot for quick sort
int choose_pivot(int lo, int hi){
int mid = ((hi-lo)/2)+1;
if((arr[hi]<arr[lo])^(arr[hi]<arr[mid])){
return hi;
}
else if((arr[lo]<arr[hi])^(arr[lo]<arr[mid])){
return lo;
}
else{
return mid;
}
}
此函数应按如下方式选择枢轴。考虑给定数组的第一个、第二个和最后一个元素。(如果数组长度为奇数,则应该清楚"中间"元素是什么;对于长度为偶数2k的数组,使用第k个元素作为"中间"元件。确定这三个元素中的哪一个是中值。返回其值。
这个函数有什么问题吗?它可能不让它做它应该做的事情?我是否遗漏了一些函数不能给出所需结果的情况?
如果您试图从coursera.org解决任务,您需要使用
int mid = ((hi-lo)/2);
有一件事我认为是致命的错误:没有关于先决条件的文件。特别地,是否使用lo == hi
合法来调用它。(如果合法代码具有未定义的行为。(lo
和hi
是什么代表在通常的C++约定下,我觉得这很有效很好,lo
将是包容性的,而hi
是排他性的。但是再说一遍,你没有告诉我们,尽管这很重要知道我们是否要判断代码的正确性。(你做arr[hi]
的事实让我觉得你已经收养了把两端都包含在内的有点不同寻常的惯例。(
没有这些信息,除了进行风格评论(例如使用!=
而不是^
比较结果,使用return
和?:
而不是if ... else
if ... else
等(。
-
您可能应该使用
!=
而不是^
来比较不等式的布尔结果。 -
根据文本描述,应该返回
arr[hi]
而不是hi
(类似于mid
、lo
(。
相关文章:
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 不正确的比较和交换计数器输出用于快速排序功能
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 并行快速排序分区中的隔离错误
- 实现 3 路分区以实现快速排序
- 为什么这个快速排序实现给出了一个奇怪的输出
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 快速排序不适用于大型数组
- 快速排序;分段错误,但找不到位置?
- 快速排序函数在快速排序算法中如何工作?
- 3路随机快速排序分区功能
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- 当给出预先排序的输入时,为什么我的快速排序实现很慢
- 快速排序不适用于排序数组
- 用于快速排序的最大元素交换次数
- 函数来选择用于快速排序的枢轴