2012-04-15 103 views
1

我想組數字,一直stucking這裏持續3天沒有找到我的代碼錯誤...真的絕望了排序(由命令行參數)的輸入...使用歸併處理用戶輸入

威爾任何人都請給我一個提示?

import java.util.Arrays; 

public class MergeSorter 
{ 

    public MergeSorter(int[] anArray) 
    { 
     a = anArray; 
    } 
    public void sort() 
    { 
      if (a.length <= 1) return; 
      int[] first = new int[a.length/2]; 
      int[] second = new int[a.length - first.length]; 

      System.arraycopy(a, 0, first, 0, first.length); 
      System.arraycopy(a, first.length, second, 0, second.length); 

      MergeSorter firstSorter = new MergeSorter(first); 
      MergeSorter secondSorter = new MergeSorter(second); 
      firstSorter.sort(); 
      secondSorter.sort(); 
      merge(first, second); 
    } 
    private void merge(int[] first, int[] second) 
    { 
     int iFirst = 0; 
     int iSecond = 0; 
     int j = 0; 
     while (iFirst < first.length && iSecond < second.length) 
     { 
      if (first[iFirst] < second[iSecond]) 
      { 
       a[j] = first[iFirst]; 
       iFirst++; 
      } 
      else 
      { 
       a[j] = second[iSecond]; 
       iSecond++; 
      } 
      j++; 
     } 
      System.arraycopy(first, iFirst, a, j, first.length - iFirst); 
      System.arraycopy(second, iSecond, a, j, second.length - iSecond); 
     } 
    private int[] a; 

    public static void main(String[] args) 
    { 
     int[] a = new int[args.length]; 
     for (int i = 0; i < args.length; i++) 
     { 
      a[i] = Integer.parseInt(args[i]); 
     } 
     MergeSorter sorter = new MergeSorter(a); 
     sorter.sort(); 
     System.out.println(Arrays.toString(a)); 
    } 
} 
+2

如果這不是Mer的練習gesort,你可以簡單地使用'Arrays.sort(array);',這是一個mergesort。 – 2012-04-15 09:45:28

+0

男人!你真的把我拉出苦難......上帝保佑你 – Harvey 2012-04-15 10:04:15

+0

嗯..我只是跑你的代碼,它就像它應該?? – Anthales 2012-04-15 10:05:21

回答

1

如果這不是對Mergesort的練習,您可以簡單地使用Arrays.sort(array);這是一個mergesort。

對於按降序排序,您可以指定自己的比較器。

Arrays.sort(array, new Comparator<Integer>() 
{ 
    public int compare(Integer i1, Integer i2) 
    { 
     return -i1.compareTo(i2); 
    } 
}); 
+1

@哈維:當有人通過發佈答案來幫助你,你可以點擊答案旁邊的勾號來接受答案。這是StackOverflow將問題標記爲已解決。歡迎來到StackOverflow。 – 2012-04-15 10:23:25

+0

再次感謝!快速 – Harvey 2012-04-15 10:36:24

1

運行測試代碼:

Random r = new Random(); 

int testCase = 0; 
out: while (true) { 
    System.out.println("Test case " + testCase++); 

    //Create array of random length (from 0 to 999) and random content 
    int[] a = new int[r.nextInt(1000)]; 
    for (int i = 0; i < a.length; i++) 
     a[i] = r.nextInt(); 

    //Try to sort (in ascending order) 
    MergeSorter sorter = new MergeSorter(a); 
    sorter.sort(); 

    //Test if sorted 
    for (int i = 0; i < a.length-1; i++) { 
     if (a[i+1] < a[i]) //not ascending 
     { 
      System.out.println("Array is not sorted!"); 
      System.out.println(Arrays.toString(a)); 
      break out; 
     } 
    } 
} 

中未找到,你的選機不排序(我把它跑了約1,000,000測試用例)任何情況下!

1

它正常工作。 試着寫:

java MergeSorter 7 3 5 3 5 

它給:

[3,3,5,5,7] 

但是,如果你寫:

java MergeSorter 73535 

它提供與輸入相同,因爲一個int參數:

[73535] 
+0

沒有狗屎... 73535是一個單一的號碼... – 2012-04-15 10:17:54

+1

我知道這是單一的數字。在我看來,作者可能會在這個例子中犯下錯誤。 – 2012-04-15 10:19:34

+0

好吧,這就是你的意思。 :對不起,我會贊成。 – 2012-04-15 10:21:13