选择排序的算法

基本思想:从待排序区中选一个最小的,和待排序区的第一个元素进行交换。

    记录待排序区中最小值的索引。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

    外层循环控制 选择的趟数。

    内层循环控制一趟的查找最小索引的过程,

    最后 和待排序区的第一个元素进行交换。

 

 常见排序算法之(一)------选择排序 随笔

 

private static void selectSort(int[] arr){
        if(arr == null)
            return;
        int len = arr.length;
        if(len == 0)
            return;
//        外层循环控制 选择的趟数。
        for(int i=0;i<len-1;i++){//i 代表着待排序区的第一个元素。
            //min 保存着待排序区的最小索引
            int min = i;
//            内层循环控制一趟的查找最小索引的过程,
            for(int j = i+1;j<len;j++){
                if(arr[j] < arr[min]){
                    min = j;
                }
            }
//            最后 和待排序区的第一个元素进行交换。
            if(min != i){
                int temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
    }

 

选择排序的分析

空间效率:显然简单选择排序只需要一个辅助空间。

时间效率:在简单选择排序中,所需移动元素的次数较少,在待排序序列已经有序的情况下,

     简单选择排序不需要移动元素,在最坏的情况下,即待排序序列本身是逆序时,则移

     动元素的次数为 3(n-1)。然而无论简单选择排序过程中移动元素的次数是多少,在任何情况

     下,简单选择排序都需要进行n(n-1)/2 次比较操作,因此简单选择排序的时间复杂度为Ο(n2 )。

稳定性:不稳定

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄