选择排序

选择排序,简单的说就是,每次遍历数列,取出最大或最小的值放在已排好序数列的最后。
最简单的就是在排序方法内部新建一个和原数组大小一样的空数组,这样每次遍历之后把最大或最小值放在对应的空数组中,代码如下:
public static int[] selectSort1(int[] arr) {
        if (arr == null || arr.length == 0) {
            return null;
        }
        int[] newArr = new int[arr.length];
        int minNum = Integer.MIN_VALUE;
        for (int i=0; i<arr.length; i++) {
            minNum = arr[i];
            for (int j=i+1; j<arr.length; j++) {
                if (arr[j] < minNum) {
                    minNum = arr[j];
                }
            }
            newArr[i] = minNum;
        }
        return newArr;
}
在这里面我们传建了一个新的数组,但是我们可以不可以不创建这个数组?答案是可以不创建,我们可以记录最小值的下标,然后跟每次循环的i进行对换,这样我们就可以在原数组中实现排序,代码如下:
public static void selectSort2(int arr[]) {
        if (arr == null || arr.length == 0) {
            return;
        }
        int minIndex = 0;
        int t = 0;
        for (int i=0; i<arr.length; i++) {
            minIndex = i;
            for (int j=i+1; j<arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            if (minIndex != i) {
                t = arr[minIndex];
                arr[minIndex] = arr[i];
                arr[i] = t;
            }
        }
}
更多内容请访问

你可能感兴趣的:(选择排序)