2010-10-02 25 views
1

我遇到了底部合併問題。我有排序/合併問題。當前的代碼包括:自下而上合併問題!

public void mergeSort(long[] a, int len) { 
     long[] temp = new long[a.length]; 
     int length = 1; 
     while (length < len) { 
      mergepass(a, temp, length, len); 
      length *= 2; 
     } 
    } 


    public void mergepass(long[] a, long[] temp, int blocksize, int len) { 
     int k = 0; 
     int i = 1; 
     while(i <= (len/blocksize)){ 
      if(blocksize == 1){break;} 
      int min = a.length; 
      for(int j = 0; j < blocksize; j++){ 
       if(a[i*j] < min){ 
        temp[k++] = a[i*j]; 
        count++; 
       } 
       else{ 
        temp[k++] = a[(i*j)+1]; 
        count++; 
       } 
      } 
      for(int n = 0; n < this.a.length; n++){ 
       a[n] = temp[n]; 
      } 
     } 
    } 
+1

-1無益的科目。無益的第二句話。看起來也是功課。 – 2010-10-02 02:08:16

回答

2

明顯的問題:

  • i沒有被增加。
  • 在任何時候你都不會比較數組中的兩個元素。 (這是if(a[i*j] < min)應該做什麼?我不知道)
  • 爲什麼你乘以ij
  • 什麼是this.a.length

風格問題:

  • mergeSort()需要len作爲參數,即使陣列具有一個隱含的長度。更糟的是,該功能還使用a.lengthlength
  • 一般很差的變量名稱。

挑剔:

  • 如果你要做出同樣尺寸的第二陣列,通常使一個「源」和其他「目標」之間交換他們通過,而不是排序到一個臨時數組,並將其複製回來。