美文网首页
01选择排序

01选择排序

作者: 飞奔吧牛牛 | 来源:发表于2019-04-09 00:31 被阅读0次

    原理:

    数组array = {2,15,7,9,30, 1, 5}

    口语描述:找出最小(大)的放到第一个位置,再从剩下的数中找到最小(大)的放到第二个位置,再从剩下的数中找到最小(大)的放到第三个位置。。。。一直找到最后

    假设最小值的下标为min(默认为0),

    第一次:从array[0]开始,找到array[0]~array[n]最小的值:array[min],
    交换array[0] 和 array[min]。

    第二次:从array[1]开始,找到array[1]~array[n]最小的值:array[min],交换array[1] 和 array[min]。

    第三次:从array[2]开始,找到array[2]~array[n]最小的值:array[min],交换array[2] 和 array[min]。

    。。。。。。
    一直循环到倒数第二个即可

    代码:

    
    /**
     * 选择排序:最简单但是最没用的排序算法
     * 
     * */
    public class Sort01_Select {
        
        public static void main(String[] args) {
            int[] array = {2,15,7,9,30, 1, 5};
            selectSort(array);
            for (int i : array) {
                System.out.print(i);
                System.out.print(" ");
            }
        }
        
    
        /**
         * 时间复杂度:
         * 当数组长度为n时,i和j的取值范围以及循环次数:
         * 
         * 范围           |   次数
         * i∈[0, n-2]   |   n-1
         * --------------------
         * j∈[1, n-1],  |   n-1
         * j∈[2, n-1],  |   n-2
         * ...          |   ...
         * j∈[n-2, n-1],|   2
         * j∈[n-1],|    1
         * 
         * 内层循环一共执行了(n-1)+(n-2)+...+1=(n² - n)/2次,
         * 忽略低次项,忽略常数项,取最高次n²
         * 得到时间复杂度为:O(n²)
         */
        public static void selectSort(int[] array) {
            int minIndex = 0;
            for (int i = 0; i < array.length - 1; i++) {
                minIndex = i;
                for (int j = i + 1; j < array.length; j++) {
                    if (array[minIndex] > array[j]) {
                        minIndex = j;
                    }
                }
                //交换
                if (array[minIndex] < array[i]) {
                    int temp = array[i];
                    array[i] = array[minIndex];
                    array[minIndex] = temp;
                }
            }
        }
    }
    

    打印结果:

    1 2 5 7 9 15 30 
    

    相关文章

      网友评论

          本文标题:01选择排序

          本文链接:https://www.haomeiwen.com/subject/wrfviqtx.html