排序算法----选择排序

     选择排序的思想较为简单,就是每一趟遍历剩下的所有元素,找到其中最小的,然后交换使之排到当前的最前面位置(就是未排定元素中的第一个位置)。

     选择排序是一种不稳定排序。

    

package young.unit01;

public class T04_SelectionSort {
    
    // 比较次数:[n+(n-1)+(n-2)+...+2+1] = n^2
    // 交换次数:|最少--数组本来就有序,0次交换
    //        |最多--数组本来逆序,交换次数等于比较次数
    // 时间复杂度:O(N^2)
    
    // 稳定性:做不到稳定性;因为每次选取剩余所有的数中最小的数与当前最前面的数交换,很可能就破换稳定性
    // 5 5 5 3 6 8 9 0
    // 遍历第一遍  发现0最小   那么第一个5与0交换---此时5 5 5的相对顺序就破换了
    // 之后遍历剩下两个5  他们都是剩余数中最小的,不用交换,指针直接下移。三个5的相对顺序在没有可能恢复成原来的样子
    public static void selectionSort(int[] nums) {
        if (nums == null || nums.length < 2) {
            return;
        }
        for (int i = 0; i < nums.length; i++) {
            int min = i;
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[min] > nums[j]) {
                    min = j;
                }
            }
            swap(nums, i, min);
        }
    }

    private static void swap(int[] nums, int i, int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
}

 

posted @ 2018-07-17 15:19  大将军姜伯约  阅读(114)  评论(0)    收藏  举报