2017-01-02 60 views
-2

我有這樣的:蹊蹺這個數組排序(Java)的

class sorter { 
    static void main(){ 
     int[] a={3,2,1}; int t=0; 
     for(int i=0; i<2; i++){ 
      int small=a[i]; 
      for(int j=i+1; j<3; j++){ 
       if(a[j]<small){ 
        small=a[j]; 
        t=j; 
       } 
      } 
      int tmp =a[i]; 
      a[i]=small; 
      a[t]=tmp; 
     } 
     System.out.println(a[0]); 
     System.out.println(a[1]); 
     System.out.println(a[2]); 
    } 
} 

試圖排序這個數組但是輸出是:

1 
2 
2 

我是真的很感謝,如果有人可以只指出錯誤。

+2

這是一種錯誤的,這是非常容易找出使用調試器,由線通過代碼行步,看變量的值。你應該學會使用你的調試器。這非常簡單,它可以節省您的時間和小時。 –

+0

謝謝,會嘗試使用調試器。 – JavaPilgrim

回答

3

如果您內環未發現任何超過small小,它留下t在最後設置值。由於內循環退出後你都會無條件交換a[i]a[t],這會導致錯誤的互換。在進入內循環之前,您可能需要每次通過外循環初始化ti

int[] a={3,2,1}; 
for(int i=0; i<2; i++){ 
    int small=a[i]; 
    int t = i; 
    for(int j=i+1; j<3; j++){ 
     if(a[j]<small){ 
      small=a[j]; 
      t=j; 
     } 
    } 
    if (i != t) { 
     int tmp =a[i]; 
     a[i]=small; 
     a[t]=tmp; 
    } 
} 
+0

明白了。謝謝! – JavaPilgrim

1

的問題是,你的T不被複位

public class Sorter { 
public static void main(String []args){ 
    int[] a={1,2,3,4,5,0,9,8,7,6}; 
    int t=0; // points to index of current smallest 
    for(int i=0; i<a.length; i++){ 
     t=i; // Point to current index of not sorted 
     int smallest=a[i]; 
     for(int j=i+1; j<a.length; j++){ 
      if(a[j]<smallest){ 
       smallest=a[j]; 
       t=j; 
      } 
     } 

     int tmp =a[i]; 
     a[i]=smallest; 
     a[t]=tmp; 
    } 
    for (int i =0; i < a.length; i++) { 
     System.out.println(a[i]); 
    } 
} 
+0

真的很有幫助的意見,謝謝。 – JavaPilgrim