2013-07-17 27 views
3

我下面荷兰国家标志溶液似乎没有仅含3个元素给定的输入阵列工作 - 0,1和2荷兰国家标志 - 不工作的更大的阵列

如果我减小的尺寸数组,它的工作原理。我无法识别错误。

我错过了什么吗?

class DNF{ 

    public static void sort(int [] arr, int size, int low, int high) { 

     if(size == 0) 
      return; 

     int lower = 0; 
     int upper = size - 1; 

     while(lower < size && arr[lower] == low) 
      lower++; 

     while(upper >=0 && arr[upper] == high) 
      upper--; 

     int temp = 0; 
     int pivot; 
     for(pivot = lower; pivot <= upper;) { 
      if(arr[pivot] == low) { 
       temp = arr[pivot]; 
       arr[pivot] = arr[lower]; 
       arr[lower] = temp; 
       pivot++; 
       lower++; 
      } else if(arr[pivot] == high) { 
       temp = arr[pivot]; 
       arr[pivot] = arr[upper]; 
       arr[upper] = temp; 
       pivot++; 
       upper--; 
      } else { 
       pivot++; 
      } 
     } 
    } 
    public static void main(String [] args) { 

     int arr [] = {0,1,2,1,2,0,1,1,1,0,0,0,1,0,2,1}; 

     for(int i=0; i<arr.length; i++) { 
      System.out.print(arr[i]+" "); //0 1 2 1 2 0 1 1 1 0 0 0 1 0 2 1 
     } 

     sort(arr, arr.length, 0, 2); 
     System.out.println(); 

     for(int i=0; i<arr.length; i++) { 
      System.out.print(arr[i]+" "); // 0 0 0 0 0 0 1 1 1 1 1 2 1 1 2 2 
     } 
    } 
} 

UPDATE:以上相同的代码适用于较小尺寸的阵列:http://ideone.com/bgEgCs

+1

注意:您可以使用Arrays.toString(arr)打印阵列 – orangegoat

回答

1

当你ARR [透视] ==高你不应该将你的支点,你与切换值可能不是你所期待与切换低值。您只知道鞋面现在处于正确的位置

} else if (inArray[pivot] == high) { 
    temp = inArray[pivot]; 
    inArray[pivot] = inArray[upper]; 
    inArray[upper] = temp; 
    pivot++; //This line is not needed 
    upper--; 
+0

+1进行说明。 –