zoukankan      html  css  js  c++  java
  • (六)js常见四大排序

    今天突然想回顾一下四大排序,虽然说在实战中没有用到,但是想回顾一下四大排序的思想
     
    var arr = [23, 34, 11, 22, 19, 18];
     
    1.冒泡排序:
    冒泡排序的思路分析:
    第1轮 第1步:[23, 34, 11, 22, 19, 18]
    第1轮 第2步:[23, 11, 34, 22, 19, 18]
    第1轮 第3步:[23, 11, 22, 34, 19, 18]
    第1轮 第4步:[23, 11, 22, 19, 34, 18]
    第1轮 第5步:[23, 11, 22, 19, 18, 34]
     
    第2轮 第1步:[11, 23, 22, 19, 18, 34]
    第2轮 第2步:[11, 22, 23, 19, 18, 34]
    第2轮 第3步:[11, 22, 19, 23, 18, 34]
    第2轮 第4步:[11, 22, 19, 18, 23, 34]
     
    第3轮 第1步:[11, 22, 19, 18, 23, 34]
    第3轮 第2步:[11, 19, 22, 18, 23, 34]
    第3轮 第3步:[11, 19, 18, 22, 23, 34]
     
    第4轮 第1步:[11, 19, 18, 22, 23, 34]
    第4轮 第2步:[11, 18, 19, 22, 23, 34]
     
    第5轮 第1步:[11, 18, 19, 22, 23, 34]
     
    //外层的for循环确定轮数
    for(var i = 1; i < arr.length; i++) {
    // 内层for循环确定每轮的步数
        for(var j = 0; j < arr.length - i; j++) {
        // 两两比较
            if(arr[j] > arr[j + 1]) {
                var temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
     
    2.选择排序
    选择排序的思路分析:
    第1轮 第1步:var iMinK = 0;
    第1轮 第2步:23 和 34比较,什么也不做
    第1轮 第3步:23 和 11比较,iMinK = 2
    第1轮 第4步:11 和 22比较,什么也不做
    第1轮 第5步:11 和 19比较,什么也不做
    第1轮 第6步:11 和 18比较,什么也不做
    第1轮 第7步:下标0和下标2进行位置交换 [11, 34, 23, 22, 19, 18]
     
    第2轮 第1步:var iMinK = 1;
    第2轮 第2步:34 和 23比较,iMinK = 2
    第2轮 第3步:23 和 22比较,iMinK = 3
    第2轮 第4步:22 和 19比较,iMinK = 4
    第2轮 第5步:19 和 18比较,iMinK = 5
    第2轮 第6步:下标1和下标5进行位置交换 [11, 18, 23, 22, 19, 34]
     
    // 外层for循环确定轮数
    for(var i = 0; i < arr.length - 1; i++) {
    // 记录最小值的下标
        var iMinK = i;
        for(var j = i + 1; j < arr.length; j++) {
            if(arr[iMinK] > arr[j]) {
                iMinK = j;
            }
        }
    // 交换数据
        if(iMinK !== i) {
            var temp = arr[i];
            arr[i] = arr[iMinK];
            arr[iMinK] = temp;
        }
    }
     
    3.插入排序
    插入排序的思路分析:
    第1轮 第1步:[23, 34, 11, 22, 19, 18]
     
    第2轮 第1步:[23, 11, 34, 22, 19, 18]
    第2轮 第2步:[11, 23, 34, 22, 19, 18]
     
    第3轮 第1步:[11, 23, 22, 34, 19, 18]
    第3轮 第2步:[11, 22, 23, 34, 19, 18]
    第3轮 第3步:[11, 22, 23, 34, 19, 18]
     
    第4轮 第1步:[11, 22, 23, 19, 34, 18]
    第4轮 第2步:[11, 22, 19, 23, 34, 18]
    第4轮 第3步:[11, 19, 22, 23, 34, 18]
    第4轮 第4步:[11, 19, 22, 23, 34, 18]
     
    第5轮 第1步:[11, 19, 22, 23, 18, 34]
    第5轮 第2步:[11, 19, 22, 18, 23, 34]
    第5轮 第3步:[11, 19, 18, 22, 23, 34]
    第5轮 第4步:[11, 18, 19, 22, 23, 34]
    第5轮 第5步:[11, 18, 19, 22, 23, 34]
     
    // 外层循环确定轮数
    for(var i = 1; i < arr.length; i++) {
    // 内层的for循环
        for(var j = i; j > 0; j--) {
            if(arr[j] < arr[j - 1]) {
                var temp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = temp;
            } else {
                break;
            }
        }
    }
    

      

    4.快速排序
    快速排序的思路分析:
    第一步:base = 23 , arr = [35, 34, 11, 22, 19, 18]
    第二步:left = [], right = []
    第三步:[11, 22, 19, 18] 23 [35, 34]
    第四步: [] 11 [22, 19, 18] 23 [34] 35 []
    第五步:[] 11 [19, 18] 22 [] 23 [34] 35 []
    第六步:[11, 18, 19, 22, 23, 34, 35]
     
    var arr = [23, 35, 34, 11, 22, 19, 18, 18];
    function quickSort(arr) {
        if(arr.length <= 1) {
            return arr; 
        }
        var iBase = arr.shift();
        var left = [], right = [];
        for(var i = 0; i < arr.length; i++) {
            if(arr[i] < iBase) {
                left.push(arr[i]);
            } else {
                right.push(arr[i]);
            }
        }
    return quickSort(left).concat(iBase, quickSort(right));
    }
    var newArr = quickSort(arr);
    console.log(newArr);
     
    JavaScript常见四大排序就是以上四种,虽说在开发中我们或许用不到,但是其思想却值得我们深思,在开发中我们用的多的是思想,一句话没有思路就没有出路。
    有问题及时评论,24小时内回复。狗尾草和大家一起努力!
     
     
     
     
     
     
  • 相关阅读:
    NCD 2019 M. NCD Salary
    NCD 2019 H. Mr. Hamra and his quantum particles
    Codeforces Testing Round #16 C.Skier
    序列自动机(数组)
    Codeforces #640 div4 F~G (构造二连弹)
    NCD 2019 C. Hasan and his lazy students
    欧拉定理,费马小定理
    微信开发
    异常后显示错误页面
    js窗体间传值
  • 原文地址:https://www.cnblogs.com/bgwhite/p/9274180.html
Copyright © 2011-2022 走看看