2013-03-22 38 views
0

我想選擇中位數作爲這個應用程序中的樞紐,但似乎我做錯了什麼。任何幫助將不勝感激。選擇中位數作爲關鍵

我得到了前幾個數字,然後到最後。

public class QuickSort { 

    public static void main(String[] args) { 
    int [] list = {1,3,2,4,6,5,8,7,9,0}; 
    quickSort (list); 

    for (int i=0; i < list.length; i++) 
     System.out.print(list[i] + " "); 
} 
public static void quickSort(int [] list) 
{ 
    quickSort(list, 0, list.length - 1); 
} 

public static void quickSort (int[] list, int first, int last) 
{ 
    int size = last - first + 1; 
    if (size > 3){ 
     int median1 = median(list, first, last); 
     int partition1 = partition(list, first, last, median1); 
     quickSort(list, first, partition1 - 1); 
     quickSort(list, partition1 + 1, last); 
    } 
} 
    public static int median(int [] list, int first1, int last1){ 
     int middle = (first1 + last1)/2; 
     if (list[first1] > list[middle]) 
      swap(list, first1, middle); 
     if (list[first1] > list[last1]) 
      swap(list, first1, last1); 
     if (list[middle] > list[last1]) 
      swap(list, middle, last1); 
     swap(list, middle, last1 - 1); 
     return list[last1 - 1 ]; 
    } 
    public static int partition(int [] list, int left, int right, long pivot) { 
     int leftPtr = left; 
     int rightPtr = right - 1; 

     while (true) { 
      while (list[++leftPtr] < pivot); 

      while (list[--rightPtr] > pivot); 
      if (leftPtr >= rightPtr) 
      break; 
      else 
      swap(list, leftPtr, rightPtr); 
     } 
     swap(list, leftPtr, right - 1); 
     return leftPtr; 
    } 
     public static void swap(int []list, int dex1, int dex2) { 
     int temp = list[dex1]; 
     list[dex1] = list[dex2]; 
      list[dex2] = temp; 
      } 

我按順序得到一些數字,但不是全部。

回答

1

通常有兩種方法可以用於計算機編程。你可以a)採取一些行之有效的方法,開始刪除/改變東西,直到你得到你喜歡的東西。或者b)儘可能小的情況 - 讓它工作 - 然後繼續增加更復雜性。 在這種情況下,我建議b)(FYI b)通常是最好的方法)

如果你從int [] list = {3,1,}開始,你可以看到你的列表沒有被正確排序。 這是因爲你的quickSort函數只是對大小大於3的列表進行排序。在你的情況下,這個條件可能應該是「size> 1」 - 儘管可能有更多的事情需要你去做,

還有很多關於維基百科QuickSort的信息: http://en.wikipedia.org/wiki/Quicksort