| 算法

作者: Hemingway_AT | 来源:发表于2019-11-01 22:02 被阅读0次

    冒泡排序

    逻辑:极值冒泡,迭代;通过设置正序标识变量,优化排序计算

    function bubbleSort(arrlist) {
        var count = arrlist.length - 1;// 最大外循环次数
        console.log('最大排序次数:' + count);
        
        for (var i = 0;i < count; i++) {
            var index = count;// 下标
            var flag = true;// 正序状态标识
            
            for(var j = 0; j < index; j++) {
                if(arrlist[j + 1] < arrlist[j]) {
                    flag = false;
                    var temp;
                    temp = arrlist[j];
                    arrlist[j] = arrlist[j + 1];
                    arrlist[j + 1] = temp;
                }
            }
            console.log('第' + (i+1) + '次排序:' + arrlist);// 打印本次排序结果
            
            if(flag){
                return arrlist;
            }
    
            index --;
        }
        return arrlist;
    }
    
    var arrlist = [];
    
    for(var i=0; i<9; i++){
        arrlist.push(Math.floor(Math.random()*100));
    }
    
    console.log('初始排序:' + arrlist);// 打印初始排序
    var sortedArr = bubbleSort(arrlist);
    console.log('最终排序:' + sortedArr);
    

    测试:

    跑3次脚本.png

    快速排序

    逻辑:找基准,三分法,使用了递归

    var quickSort = function(arraylist) {
      if (arraylist.length <= 1) { return arraylist; }
        // 基准元素的下标
      var pointIndex = Math.floor(arraylist.length / 2);
        // 基准元素
      var point = arraylist.splice(pointIndex, 1)[0];
      var left = [];
      var right = [];
        // 剩余元素分筛
      for (var i = 0; i < arraylist.length; i++){
        if (arraylist[i] < point) {
          left.push(arraylist[i]);
        } else {
          right.push(arraylist[i]);
        }
      }
        // 返回递归计算结果
      return quickSort(left).concat([point], quickSort(right));
    };
    

    相关文章

      网友评论

        本文标题:| 算法

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