我有这个:
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
如果有人可以指出错误,我真的很感激。
答案 0 :(得分:3)
如果您的内部循环找不到小于small
的任何内容,则会在最后设置的值中留下t
。由于在内循环退出后无条件地将a[i]
与a[t]
交换,这可能导致错误的交换。在进入内循环之前,您可能希望每次通过外循环初始化t
到i
。
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;
}
}
答案 1 :(得分: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]);
}
}