循环不变量快速排序

时间:2012-12-02 02:47:33

标签: java quicksort

我怎样才能从不变量中理解l是要返回的正确值以及如何返回 初始化 l =低;和 h =高;建立不变量?

/* invariant
         * low <= l <= h <= high
         * In region for indexes i with low <= i < end:
         *   elements are as originally, but rearranged.
         *   if i < l then arr[i] < x
         *   if i >= h then arr[i] >= x
         * Elements outside region are unchanged.
         */ 

private static int partition(int[] arr, int low, int high, int x)
{
        int l = low;
        int h = high;
         while (l<h)
         {
            if (arr[l] < x)    
               l =l +1;
            else
            {                           
                int x = arr[l];
                arr[l] = arr[h-1];
                arr[h-1] = x
                h = h-1;
             } 
         }
         return l;
      } 

1 个答案:

答案 0 :(得分:1)

您将数组分为两部分开始。您选择中间元素x,然后将所有较小的元素移动到左侧的x,这样所有剩余的右元素都会变得大于x

完成后,x处于正确的位置。现在,您分别为左右段调用相同的方法。

这样,高和低代表段的lowerupper索引。例如如果您的数组大小为10x最终位于4(索引= 3),那么对于第一个子列表,low = 0,high = 2.

类似于第二个子列表,low = 4,high = 9。