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个元素作为“中间”元素。确定这三个元素中的哪一个是中位数。返回它的价值。
这个功能有什么不妥,可能不会让它做到它的意思吗?我错过了一些函数没有给出预期结果的情况吗?
答案 0 :(得分:1)
如果您尝试从coursera.org解决任务,则需要使用
int mid = ((hi-lo)/2);
答案 1 :(得分:1)
我认为有一件事是致命的错误:有
没有关于前提条件的文件。特别是,
正在调用它lo == hi
合法与否。 (如果合法,那就是
代码有未定义的行为。)lo
和hi
是什么
代表?在通常的C ++约定下,我找到了工作
很好,lo
将具有包容性,hi
排他性。但
再说一遍,你没有告诉我们,尽管它很重要
知道我们是否要判断代码的正确性。 (该
事实上arr[hi]
让我觉得你已经采纳了
使两端都包容的有些不寻常的惯例。)
如果没有这些信息,就不可能做任何事情
制作风格评论(例如,使用!=
而不是^
比较结果时,请使用return
与?:
而不是if ... else
if ... else
等。)
答案 2 :(得分:0)
您应该使用!=
代替^
来比较不等式的布尔结果。
根据文字说明,您应该返回arr[hi]
而不是hi
(mid
,lo
的类似内容。