选择排序---简单选择排序

基本思想

在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数中再找最小(或者最大)的与第2个位置的数交换,以此类推,知道第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
简单选择排序的实例:


BDB973D0-C3CA-4397-A644-D3A56080BC30.png

操作方法:
第一趟:从n个记录中找出关键码最小的记录和第一个记录交换;
第二趟:从第二个记录开始的n-1个记录中再选出关键码最小的记录与第二个记录交换
以此类推......
第i趟,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i个记录交换,直到整个序列按关键码有序。

java代码

public static void simpleSelectSort(int[] array) {
        if (null == array || array.length <= 1) {
            return;
        }

        for (int i = 0; i < array.length - 1; i++) {
            int temp;
            int index = i;

            for (int j = i + 1; j < array.length; j++) {
                if (array[index] > array[j]) {
                    index = j;
                }
            }

            temp = array[index];
            array[index] = array[i];
            array[i] = temp;
        }
    }

时间复杂度
简单选择排序的比较次数与序列的初始排序无关。假设待排序的系列有N个元素,则比较次数总是N(N-1)/2
而移动次数与系列的初始排序有关,当排序正序时,移动次数最少,为0
当序列反序时,移动次数最多,为3N(N-1)/2
所以,综上,简单排序的时间复杂度为O(N*N)

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