2017-01-02 42 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