开发者社区> 问答> 正文

用 js 实现一个标准的排序算法

用 js 实现一个标准的排序算法

展开
收起
kun坤 2019-11-28 13:53:22 223 0
1 条回答
写回答
取消 提交回答
  • 一.冒泡排序

    function BubbleSort(array) {
      var length = array.length;
      for (var i = length - 1; i > 0; i--) {
        //用于缩小范围
        for (var j = 0; j < i; j++) {
          //在范围内进行冒泡,在此范围内最大的一个将冒到最后面
          if (array[j] > array[j + 1]) {
            var temp = array[j];
            array[j] = array[j + 1];
            array[j + 1] = temp;
          }
        }
        console.log(array);
        console.log("-----------------------------");
      }
      return array;
    }
    
    var arr = [10, 9, 8, 7, 7, 6, 5, 11, 3];
    var result = BubbleSort(arr);
    console.log(result);
    /*
    [ 9, 8, 7, 7, 6, 5, 10, 3, 11 ]
    -----------------------------
    [ 8, 7, 7, 6, 5, 9, 3, 10, 11 ]
    -----------------------------
    [ 7, 7, 6, 5, 8, 3, 9, 10, 11 ]
    -----------------------------
    [ 7, 6, 5, 7, 3, 8, 9, 10, 11 ]
    -----------------------------
    [ 6, 5, 7, 3, 7, 8, 9, 10, 11 ]
    -----------------------------
    [ 5, 6, 3, 7, 7, 8, 9, 10, 11 ]
    -----------------------------
    [ 5, 3, 6, 7, 7, 8, 9, 10, 11 ]
    -----------------------------
    [ 3, 5, 6, 7, 7, 8, 9, 10, 11 ]
    -----------------------------
    [ 3, 5, 6, 7, 7, 8, 9, 10, 11 ]
    */
    

    二.选择排序

    function SelectionSort(array) {
      var length = array.length;
      for (var i = 0; i < length; i++) {
        //缩小选择的范围
        var min = array[i]; //假定范围内第一个为最小值
        var index = i; //记录最小值的下标
        for (var j = i + 1; j < length; j++) {
          //在范围内选取最小值
          if (array[j] < min) {
            min = array[j];
            index = j;
          }
        }
        if (index != i) {
          //把范围内最小值交换到范围内第一个
          var temp = array[i];
          array[i] = array[index];
          array[index] = temp;
        }
        console.log(array);
        console.log("---------------------");
      }
      return array;
    }
    
    var arr = [1, 10, 100, 90, 65, 5, 4, 10, 2, 4];
    var result = SelectionSort(arr);
    console.log(result);
    /*
    [ 1, 10, 100, 90, 65, 5, 4, 10, 2, 4 ]
    ---------------------
    [ 1, 2, 100, 90, 65, 5, 4, 10, 10, 4 ]
    ---------------------
    [ 1, 2, 4, 90, 65, 5, 100, 10, 10, 4 ]
    ---------------------
    [ 1, 2, 4, 4, 65, 5, 100, 10, 10, 90 ]
    ---------------------
    [ 1, 2, 4, 4, 5, 65, 100, 10, 10, 90 ]
    ---------------------
    [ 1, 2, 4, 4, 5, 10, 100, 65, 10, 90 ]
    ---------------------
    [ 1, 2, 4, 4, 5, 10, 10, 65, 100, 90 ]
    ---------------------
    [ 1, 2, 4, 4, 5, 10, 10, 65, 100, 90 ]
    ---------------------
    [ 1, 2, 4, 4, 5, 10, 10, 65, 90, 100 ]
    ---------------------
    [ 1, 2, 4, 4, 5, 10, 10, 65, 90, 100 ]
    ---------------------
    [ 1, 2, 4, 4, 5, 10, 10, 65, 90, 100 ]
    */
    

    三.插入排序

    function InsertionSort(array) {
      var length = array.length;
      for (var i = 0; i < length - 1; i++) {
        //i代表已经排序好的序列最后一项下标
        var insert = array[i + 1];
        var index = i + 1; //记录要被插入的下标
        for (var j = i; j >= 0; j--) {
          if (insert < array[j]) {
            //要插入的项比它小,往后移动
            array[j + 1] = array[j];
            index = j;
          }
        }
        array[index] = insert;
        console.log(array);
        console.log("-----------------------");
      }
      return array;
    }
    
    var arr = [100, 90, 80, 62, 80, 8, 1, 2, 39];
    var result = InsertionSort(arr);
    console.log(result);
    /*
    [ 90, 100, 80, 62, 80, 8, 1, 2, 39 ]
    -----------------------
    [ 80, 90, 100, 62, 80, 8, 1, 2, 39 ]
    -----------------------
    [ 62, 80, 90, 100, 80, 8, 1, 2, 39 ]
    -----------------------
    [ 62, 80, 80, 90, 100, 8, 1, 2, 39 ]
    -----------------------
    [ 8, 62, 80, 80, 90, 100, 1, 2, 39 ]
    -----------------------
    [ 1, 8, 62, 80, 80, 90, 100, 2, 39 ]
    -----------------------
    [ 1, 2, 8, 62, 80, 80, 90, 100, 39 ]
    -----------------------
    [ 1, 2, 8, 39, 62, 80, 80, 90, 100 ]
    -----------------------
    [ 1, 2, 8, 39, 62, 80, 80, 90, 100 ]
    */
    

    四.希尔排序 五.归并排序 六.快速排序

    2019-11-28 13:53:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载