有什么更有效的方法来确保我不会在这个快速排序函数中陷入无限循环?(C++)



这是我的分区函数的相对部分:

    while(low < high){
      while(arr[low] < pivot)
         low += 1;
      while( arr[high] > pivot)
         high -= 1;
       people temp = arr[low];
       arr[low] = arr[high];
       arr[high] = temp;
       if(L==low && H==high)
         {low+=1; high -= 1;}
       L=low; H = high;
   }

我使用 L 和 H 来查看在封闭循环结束时是否改变低或高。没有它们,如果我不增加低或高,我可能会陷入循环,但同时我需要在交换后重新测试该值。

我认为代码有两个问题。

  1. 当数组的元素等于枢轴时,您不考虑这种情况。
  2. arr[low] > pivotarr[high] < pivot
    low >= high时,您不考虑这种情况。

在此处查看一些分区代码。

最新更新