zoukankan      html  css  js  c++  java
  • 白话排序算法--选择排序

    前言:

      继续排序方法,紧接早上的插入排序,紧跟其后,现在跟新上选择排序算法

     选择排序:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    情景描述:

      新学期换了新体育老师,面对同样的排队情景,他说道:“我不管之前是怎么教的,之后都按照我的来做,大家自己进行选择排序”。

    1.   从第一位同学开始,和第二位同学比较,谁矮了,谁就记着目前自己是最矮的(可以站前面,嘿嘿), 然后再和第三位同学比较...最矮的依次和后面每位同学比较(这里的最矮是实时变化的),最后自己跑到本次排序队列第一个位置进行位置互换
    2.   排除已经排好队的同学,重复步骤1,每次选出一个最矮的,站到本次队列的第一个,直到剩下最后一人,排列完成

      有的同学说:“这不是和之前老湿说的冒泡的一样嘛”

      有的同学则说:“不一样,感觉没那么费劲了”
         老湿说:“都对,思想和冒泡是一样的,每次选出要排列里面的--最高或最低相应站到最后或最前,但是,冒泡它每次比较都要换位置,而咱这选择不需要每次都换,咱先把目前最高或最低记着(缓存起来),拿缓存和后面的人比,就不需要每次相邻的都得两两比较了......”

      同学们瞬间大悟,大湿高明~!


      上图中,黄色部分为每次新一轮排序的第一个缓存对象(随时变化),深色部分为已排序列表


    代码片段:

    /**
         * 选择排序,从当前位(0开始)开始和下一位依次比较,找到最小元素,让当前位和最小元素换位,其他元素不变
         * 继续从当前位的下一位开始,依次查找最小元素并换位,直至最后一位
         * @param arr
         * @return
         */
        public static int[] selectSort(int[] arr) {
            int len = arr.length;
            for (int i = 0; i < len; i++) {
                int min = arr[i]; // 每次都认为当前队列第一位为最小值,进行缓存
                int index = i;       // 缓存最小值(变化)坐标
                for (int k = i + 1; k < len; k++) { // 向后比较
                    if (arr[k] <= min) { // 如果后一个小于等于前一个
                        min = arr[k]; // 更换最小值
                        index = k; // 变更最小值坐标
                    }
                }
                if (min == arr[i]) // 相等则不变化,默认保留当前队列第一个为最小
                    continue;
                // 循环完毕,找出了最小值的坐标,即为index,把当前坐标i元素和最小元素换位
                int k = arr[i];
                arr[i] = arr[index];
                arr[index] = k;
            }
            return arr;
        }

    优点:移动数据的次数少

    缺点:比较次数多,且根据元素排列,不具稳定性

                                  写作不易,难免有疏漏和错误,还请慷慨指正,不错请推荐

      ps:欢迎转载,转载请注明出处:http://www.cnblogs.com/liuyitian/p/4073682.html


                                              每天多学一点点     代码少敲一点点

  • 相关阅读:
    关于故事和段子
    SQLserver2008数据库备份和还原问题(还原是必须有完整备份)
    百度文库破解方法
    如何识别病毒,转自百度文库,千辛万苦破解出来的
    20个人艰不拆的事实:知道真相的我眼泪掉下来 T.T
    linux学习网站分享
    个人对于腾讯和优酷的看法
    今天去客户现场的一些感想
    基于 Blazui 的 Blazor 后台管理模板 Blazui.Admin 正式尝鲜
    新手福利!Blazor 从入门到砖家系列教程(你真的可以成为砖家)
  • 原文地址:https://www.cnblogs.com/liuyitian/p/4073682.html
Copyright © 2011-2022 走看看