2013-07-15 119 views
0

我正在嘗試手動將升序排列爲Double Array。我遇到的問題是輸出僅列出了頂部的第一個最小值(這是正確的),但列出了其餘的值爲0.0。 (數值範圍從-5到+20)。以下是我在排序時的編碼嘗試。任何幫助將不勝感激。謝謝。按升序對雙數組排序

   int index; 
      double temp; 

      for(index = 0; index < x.length; index++) 
       { 
       for(int j = 0; j < x.length - 1; j++) 
        { 
         if(x[j + 1] < x[j]) 
          { 
          temp = x[j + 1]; 
          x[j + 1] = x[j]; 
          x[j] = temp; 
          } 
         } 
       } 
+2

是否有你不能用'Arrays.sort'理由嗎?它的實現將比你提出的要好得多。 –

+0

你的氣泡排序的實現幾乎是正確的。你可以發佈你的完整程序嗎?可能是你搞砸了你的輸入。 – bsd

回答

1

這幾乎是你到達那裏的原因。試試這個:

public static void sort(int[] x) { 
    boolean sorted=true; 
    int temp; 

    while (sorted){ 
    sorted = false; 
    for (int i=0; i < x.length-1; i++) 
     if (x[i] > x[i+1]) {      
      temp  = x[i]; 
      x[i]  = x[i+1]; 
      x[i+1]  = temp; 
      sorted = true; 
     }   
    } 

}

但科林是正確的。用Arrays.sort更好。

+0

我理解這個邏輯比我的For循環更好,但我得到了和以前相同的結果。我正在讀取文件中的值。我嘗試了Arrays.sort(Arrays.sort(x);)但是這導致了一些更奇怪的事情,它列出了最小的值,然後是一串0.0,然後是正確的值列表,以便... –

+0

如果Arrays.sort(x)給了你一堆0.0,那麼你很可能在你的數組中有一堆。我懷疑錯誤是在輸入中,而不是在排序代碼中。 –

1

你靠近,但你需要比較x [指數]與X [J]:

for (int index = 0; index < x.length - 1; index++) { 
    for (int j = index + 1; j < x.length; j++) { 
    if (x[j] < x[index]) { 
     temp = x[j]; 
     x[j] = x[index]; 
     x[index] = temp; 
    } 
    } 
} 
+0

謝謝,但我嘗試了修改的代碼,但我得到了和以前相同的結果,0.0作爲其他所有結果列出。我正在讀取文件中的值。任何想法爲什麼? –

+0

這可能是代碼中其他地方的問題。 – GriffeyDog

+0

啊,謝謝你的幫助。我會繼續看着它。 –