2012-12-26 24 views
1

所以我試圖使這個算法工作,但每次運行它我得到[10,11,7,10,7,5,7,5]作爲我的輸出。目標是以降序獲得結果。此外,我不明白爲什麼有8個結果,當我的數組只包含6個值。請幫助..謝謝。 公共課搜索{交換排序算法查詢

public static void main (String[]args) 
{ 
    int[] array = {10,7,11,5,13,8}; 
    //ExchangeSort(array); 

}; 

public static void ExchangeSort(int[] num) 
{ 
    int i,j,temp; 

    for(i=1;i<num.length-1;i++) 
    { 
     for(j=i+1;j<num.length;j++) 
     { 
      if(num[i]<num[j]) 
      { 
       temp = num[i]; 
       num[i] = num[j]; 
       num[j] = temp; 

       //System.out.println(temp); 
      } 
     } 

    } 
}; 

};;

回答

2

由於數組索引從0開始,因此您忽略排序中的第一個元素。你的第一個循環應該與指數0開始,上升到length-1爲:

 for(i=0;i<num.length-1;i++) 

還需要打印的環外或在使用Arrays.toString(無需環路)的主要方法數組排序爲:

 // this will print the array elements 
    System.out.println("Sorted Array: "+Arrays.toString(num)); 

並從方法的末尾刪除分號;

天文臺注意:您的方法名稱不應以大寫字母開頭。

編輯:你的全糾正代碼如下:

public static void main(String[] args) { 
    int[] array = {10,7,11,5,13,8}; 
    exchangeSort(array); 
    System.out.println("Sorted Array: "+Arrays.toString(array)); 
} 
public static void exchangeSort(int[] num) { 
    int temp; 
    for(int i=0;i<num.length-1;i++){ 
     for(int j=i+1;j<num.length;j++){ 
      if(num[i]<num[j]){ 
       temp = num[i]; 
       num[i] = num[j]; 
       num[j] = temp; 
      } 
     } 
    } 
    System.out.println("Sorted Array: "+Arrays.toString(num)); 
} 
+0

@ user1883386:只是一個供參考的,我更新了更多的細節問題的答案。 –

1

其中來自你的輸出?

ExchangeSort(array);之前刪除的意見,並增加了一個簡單的輸出:

ExchangeSort(array); 

    for (int i : array) { 
     System.out.println(i); 
    } 

當我再運行代碼我得到:10 13 11 8 7 5,接近預期的結果。 10位置錯誤,因爲您的循環索引以1開頭,但數組索引以0開頭。因此第一個元素不會更改。

您可以用1i開始值更改爲0解決這個問題:

for(i=0; i<num.length-1; i++)