简单选择排序算法,打印结果与预期不符,求指导

算法如下:

    public int[] simpleSelectSort(int arr[]){
        for(int i = 0; i < arr.length - 1 ; i++){
            int x = i;
            for(int j = i+1; j < arr.length; j++){
                if(arr[j] < arr[x]){
                    x = j;
                }
            }
            int t = arr[i];
            arr[i] = arr[x];
            arr[x] = t;
            System.out.println("第" + (i+1) + "次排序结果:");
            for(int k = 0; k<arr.length; k++){
                System.out.print(arr[k]+" ");           
            }
            System.out.println("");
        }   
        return arr;
    }

测试的数组为: a[] = {8,2,3,5,9,1}
打印的结果如图所示
图片说明
不知道是哪里出了问题,希望大家指出来~

8个回答

闹了个笑话……其实这个算法是没有问题,我才发现是因为我用来测试的数据正好在第一次排序后符合要求了,把数据修改了以后打印结果就对了。如图:
a[] = {8,9,3,10,5,2,1};
图片说明
看来还是要细心才行呐~最后感谢楼上各位的帮助!

这是由于你的x的原因,当第一次满足arr[j] < arr[x]的条件后,x=j;此时,x的只不再是0。所以,出现了这样的结果。

主函数贴出来,程序没什么毛病

楼主我测试了一下,用你的方法的确会出现这种情况,用

                            System.out.println("第" + (i+1) + "次排序结果:");
                            System.out.println(Arrays.toString(arr));

的话事正常的现实,放置断点发现会跳出到String类里,等其他大神解答~

public int[] simpleSelectSort(int arr[]){
for(int i = 0; i < arr.length - 1 ; i++){
int x = i;
for(int j = i+1; j < arr.length; j++){
if(arr[j] < arr[x]){
x = j;
}
}
int t = arr[i];
arr[i] = arr[x];
arr[x] = t;
System.out.println("第" + (i+1) + "次排序结果:");
for(int k = 0; k<arr.length; k++){
System.out.print(arr[k]+" ");

}
System.out.println("");
}

return arr;
}

    楼主,你只需要修改一丢丢,就对了。
vsign94hui
会跳舞De袋鼠 int x = 0; for(int j = i+1; j < arr.length; j++){ if(arr[j] < arr[i]){ x = j; } }
2 年多之前 回复
    int x = 0;
        for(int j = i+1; j < arr.length; j++){
            if(arr[j] < arr[i]){
                x = j;
            }
        }

                修改这一块,不好意思,刚才粘错了

最后的结果

public class MyTest {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    int []a={8,2,3,5,9,1};
    simpleSelectSort(a);
}
public static void simpleSelectSort(int arr[]){
        for(int i = 0; i < arr.length - 1 ; i++)
        {
            int x = i;
            for(int j = i+1; j < arr.length; j++){
                if(arr[j] < arr[i]){
                    x = j;
                }
            }
            int t = arr[i];
            arr[i] = arr[x];
            arr[x] = t;
            System.out.println("第" + (i+1) + "次排序结果:");
            for(int k = 0; k<arr.length; k++){
                System.out.print(arr[k]+" ");           
            }
            System.out.println("");
        }   
 }

}
(https://img-ask.csdn.net/upload/201703/03/1488556756_772302.png)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!