C++ 函数选择用于快速排序的轴

C++ 函数选择用于快速排序的轴,c++,sorting,C++,Sorting,此函数应按如下方式选择轴。考虑给定数组的第一个、中间部分和最后一个元素。如果数组的长度为奇数,则应该清楚中间的元素是什么;对于偶数长度为2k的数组,请使用第k个元素作为中间元素。确定这三个元素中的哪一个是中位数。返回其值 这个函数是否有任何错误,可能不让它完成它的本意?我是否遗漏了函数不能给出期望结果的情况 您可能应该使用!=而不是^来比较布尔结果的不等式 根据文本描述,您应该返回arr[hi],而不是mid、lo的hi和类似值 如果您试图从coursera.org解决此任务,您需要使用 int

此函数应按如下方式选择轴。考虑给定数组的第一个、中间部分和最后一个元素。如果数组的长度为奇数,则应该清楚中间的元素是什么;对于偶数长度为2k的数组,请使用第k个元素作为中间元素。确定这三个元素中的哪一个是中位数。返回其值


这个函数是否有任何错误,可能不让它完成它的本意?我是否遗漏了函数不能给出期望结果的情况

您可能应该使用!=而不是^来比较布尔结果的不等式

根据文本描述,您应该返回arr[hi],而不是mid、lo的hi和类似值


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

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;
   }
}

有一件事我认为是一个致命的错误:有 没有关于先决条件的文件。特别地, 是否用lo==hi合法来调用它。如果合法的话 代码具有未定义的行为。你好和你好吗 代表在通常的C++约定下,我找到了工作 很好,lo是包容性的,hi是排他性的。但是 再说一次,你没有告诉我们,尽管这很重要 知道我们是否要判断代码的正确性。这个 事实上,你是arr[hi]让我觉得你是领养的 使双方都有包容性的有点不寻常的惯例

如果没有这样的信息,除了 作出风格上的评论,例如使用!=而不是 比较结果时,使用return和?:而不是if。。。其他的
如果否则,等等。

那么你的问题是什么?函数是否有任何错误,不应该执行它希望执行的操作?arr[mid]int mid = ((hi-lo)/2);