赞助
   // 选择排序
        // 核心思路:
        //    从第一个单元开始
        //    默认当前单元是最小值
        //    存储当前单元的索引下标
        //    通过索引下标,获取数据,跟之后的每一个单元的数据进行比较
        //    如果之后的单元存储的数据是较小值,那么就存储这个单元的索引下标
        //    循环一次之后,变量中存储的是当前参与循环的所有单元,存储最小值的索引下标
        //    如果这个索引下标,不是,原始的索引下标,就执行交换存储数据的操作
        //    完成上述操作,会比较出一个最小值在起始位置
        //    多次循环完成整个数组的排序

        // 存储索引,通过索引调用数据,比较数据,存储索引,最终判断索引,交换数据

        // 优化点 : 
        //    1, 如果数组有 n 个单元需要 比较排序,外层循环只要执行n-1次就可以
        //    2, 如果当前循环是从 i 索引开始 实际比较 从 i+1 开始和 i 比较

        // 每次选择一个最小值,存储在数组的起始位置


        var arr = [876,231,4,3,1765,7658,3,3213,2,1323];

        for(var i = 0 ; i <= arr.length-1-1 ; i++){
            // 定义一个变量,存储每次参与循环,起始单元的索引下标
            // 第一次,没有比较出任何最小值,从第一个单元也就是索引 0 开始循环 , 默认索引0位置存储的是最小值
            // 第二次,已经比较出第一个最小值,存储在索引0位置,循环是从索引1开始,默认索引1位置存储的是最小值
            // 第三次,已经比较出两个最小值,存储在索引0,1位置,循环是从索引2开始,默认索引2位置存储的是最小值
            var min = i;

            // 从当前循环起始单元的下一个位置,开始循环,也就是 i+1
            // 循环至最后一个单元
            for(var j = i+1 ; j <= arr.length-1 ; j++){
                // 如果 变量中存储的索引,获取的数据
                // 比 当前 循环到索引 存储的数据大
                // 变量 存储 当前 位置的索引下标
                if(arr[min] > arr[j]){
                    min = j;
                }
            }


            // 内层循环结束,变量中存储本次参与循环的所有单元中,最小值所在的索引下标
            // 变量中存储的索引下标,如果不是 起始的索引下标
            // 交换两个索引下标 min变量中存储的索引下标 和 起始的索引下标 i 对应的数据数值
            if(min != i){
                var num = arr[min];
                arr[min] = arr[i];
                arr[i] = num;
            }
        }
posted on 2020-11-26 00:13  Tsunami黄嵩粟  阅读(50)  评论(0编辑  收藏  举报