首页 > 解决方案 > 选择排序检查是否正确

问题描述

检查算法是否正确,我通过编写来开发它,但是在线给出的算法是在第一个 for 循环中减小大小的地方:|

class Selectionsort {
    public void sort(int[] arr,int size) {
        int minimum = 0;
        for(int j =0;j < size;j++) {
            for(int i = j; i < size;i++) {
                if(arr[i] < arr[minimum]) {
                    minimum = i;
                }
            }
            int temp = arr[minimum];
            arr[minimum] = arr[j];
            arr[j] = temp;
            System.out.println("\n");
            for(int x : arr) {
                System.out.print( x + " ");
            }
        }
    }  
}
public class HEllo {
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    Random rand = new Random();
    int size = input.nextInt();
    int[] arr = new int[size];
    for(int i=0; i< size;i++) {
        arr[i] = rand.nextInt(20);
    }
    for(int i : arr) {
        System.out.print(i + " ");
    }
    System.out.println("\n");

    Selectionsort S = new Selectionsort();
    S.sort(arr, size);
}

}

标签: javaarrays

解决方案


不,你的方法不正确。

测试运行:

    int[] a = { 3, 5 };
    sort(a, a.length);
    System.out.println(Arrays.toString(a));

预期输出:

[3, 5]

观察到的输出:

3 5 

5 3 [5, 3]

我相信您的问题是minimum在外循环的迭代之间存在的值。所以如果j你找到一个minimum = j,那么下一个jminimum仍然是j - 1,所以你将交换到已经排序的数组部分,实际上破坏了你已经完成的排序。

我建议您改为minimum在外for循环内声明。然后它也会更清楚,这0不是正确的初始值。我把它留给你找到一个正确的。


推荐阅读