Java 带重复项的快速排序错误

Java 带重复项的快速排序错误,java,quicksort,Java,Quicksort,我的快速排序算法有点问题。它在没有重复值的数组上非常有效。但一旦我有了一个2+重复的数组,它就会陷入一个无休止的循环中。例如,如果我的数组是: int[] array = {44, 53, 36, 186, 22, 162, 22}; public void quick_sort(int[] data, int low, int high) { // 1 or 0 items are sorted by default if(high - low < 1)

我的快速排序算法有点问题。它在没有重复值的数组上非常有效。但一旦我有了一个2+重复的数组,它就会陷入一个无休止的循环中。例如,如果我的数组是:

int[] array = {44, 53, 36, 186, 22, 162, 22};



public void quick_sort(int[] data, int low, int high)
   {  // 1 or 0 items are sorted by default
      if(high - low < 1)
         return;

      int left = low;
      int right = high;
      int pivot = data[low + (high - low) / 2];  

      while(left < right)
      {  // Increment left pointer until left >= pivot
         while(data[left] < pivot)
            left++;

         // Increment right pointer until right <= pivot
         while(data[right] > pivot)
            right--;

         // If left <= right; swap values
         if(left <= right)
         {  int temp = data[right];
            data[right] = data[left];
            data[left] = temp;
         }
      }

      // quick_sort 'lesser values'
      quick_sort(data, low, left - 1);
      // quick_sort 'greater values'
      quick_sort(data, left + 1, high);
   }
int[]数组={44,53,36,186,22,162,22};
公共无效快速排序(int[]数据、int低、int高)
默认情况下,{//1或0项被排序
如果(高-低<1)
返回;
int左=低;
int右=高;
int pivot=数据[低+(高-低)/2];
while(左<右)
{//递增左指针直到左>=轴
while(数据[左]//如果左考虑当
data[left]==data[right]==pivot
时会发生什么,那么使用重复项,您可以得到
(left
,但是
data[left]==pivot==data[right]

在这种情况下,循环不会向左递增或向右递减,它只是一次又一次地交换元素…(同样有趣的是,即使在
left==right
时也会“交换”)

   public void quick_sort(int[] data, int low, int high)
   {  // 1 or 0 items are sorted by default
      if(high - low < 1)
         return;

      int left = low;
      int right = high;
      int pivot = data[low + (high - low) / 2];  

      while(left <= right)
      {  // Increment left pointer until left >= pivot
         while(data[left] < pivot)
            left++;

         // Increment right pointer until right <= pivot
         while(data[right] > pivot)
            right--;

         // If left < right; swap values
         if(left <= right)
         {  int temp = data[left];
            data[left] = data[right];
            data[right] = temp;
            left++;
            right--;
         }

      }
      // quick_sort 'lesser values'
      quick_sort(data, low, right);

      // quick_sort 'greater values'
      quick_sort(data, left, high);
   }