用于选择枢轴以进行快速排序的功能

时间:2013-02-06 10:26:43

标签: c++ sorting

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个元素作为“中间”元素。确定这三个元素中的哪一个是中位数。返回它的价值。

这个功能有什么不妥,可能不会让它做到它的意思吗?我错过了一些函数没有给出预期结果的情况吗?

3 个答案:

答案 0 :(得分:1)

如果您尝试从coursera.org解决任务,则需要使用

int mid = ((hi-lo)/2);

答案 1 :(得分:1)

我认为有一件事是致命的错误:有 没有关于前提条件的文件。特别是, 正在调用它lo == hi合法与否。 (如果合法,那就是 代码有未定义的行为。)lohi是什么 代表?在通常的C ++约定下,我找到了工作 很好,lo将具有包容性,hi排他性。但 再说一遍,你没有告诉我们,尽管它很重要 知道我们是否要判断代码的正确性。 (该 事实上arr[hi]让我觉得你已经采纳了 使两端都包容的有些不寻常的惯例。)

如果没有这些信息,就不可能做任何事情 制作风格评论(例如,使用!=而不是^ 比较结果时,请使用return?:而不是if ... else if ... else等。)

答案 2 :(得分:0)

  1. 您应该使用!=代替^来比较不等式的布尔结果。

  2. 根据文字说明,您应该返回arr[hi]而不是himidlo的类似内容。

    < / LI>