冒泡排序和插入排序的 JS 实现

  • 冒泡排序
    • 步骤
      1. 比较第一项和第二项,如果第一项的数比第二项大,把第一项放在第二项后面。再比较第二项和第三项,以此类推,直到最后一项,这样最大的数字就到了最后的位置。见例子中的内循环。
      2. 重复上面的步骤,直到没有任何一对数字需要比较。
    • JavaScript 实现:

functionbubbleSort(arr) {

  //获取数组的长度

    var len = arr.length,

        i, j;

        //外循环取第一项,第一次循环结束后取第二项,依次类推

    for (i = len - 1; i >= 0; i--) {

      //内循环取第二项,第一次循环后取第三项,依次类推

        for (j = 1; j <= i; j++) {

          //如果前者比后者大,交换它们

          // 方法是重新声明一个temp存放arr[j-1]

          // 再把arr[j]的值放到arr[j-1]的位置

          // 再把temp中存的值放到arr[j]的位置。

            if (arr[j - 1] > arr[j]) {

                var temp = arr[j - 1];

                arr[j - 1] = arr[j];

                arr[j] = temp;

            }

        }

    }

    return arr;

}

 

console.log(bubbleSort([7,5, 2, 4, 3, 9])); //[ 2, 3, 4, 5, 7, 9 ]

 

  • 选择排序
    • 步骤:
      1. 先找到最小值,把它放到序列的启起始位置
      2. 然后再继续找最小值,放在第二个位置,以此类推。
    • JavaScript 实现:

function selectionSort(arr) {

    var minIndex, temp, i, j,

        len = arr.length;

    for (i = 0; i < len;i++) {

        //初始位置下标标记

        minIndex = i;

        //找到最小值的下标

        for (j = i + 1; j <len; j++) {

            if (arr[j] <arr[minIndex]) {

                minIndex = j;

            }

        }

        //交换两者

        temp = arr[i];

        arr[i] =arr[minIndex];

        arr[minIndex] = temp;

    }

    return arr;

};


 

  • 插入排序
    • 如何工作:

想象一下你在玩纸牌,某个人一张接一张把卡片给你,当你接到卡片时,你把小一点的数字放在左边,这就是插入排序。

  • 步骤:
    1. 如果你拿到的第一张卡片是5,什么都别做。
    2. 如果你拿到第二张卡片是 2,你把它放在卡片 5 的前面,这样你就改变了它们的位置。
    3. 如果你拿到卡片4,把它放在第二个位置,就是 2 和 5 的中间,就等于把 5 向后移动了一个位置,而 2 依然是最小的,不用移动,这样就把 4 插入了第二位置。
    4. 如果你拿到了 10 比 5 还要大,因此放在最后的位置。依次类推,直到没有新的卡片。


  • 代码

functioninsertionSort(arr) {

    var i, //未排序的索引

        j, //排序部分的索引

        value, //当前将要用于比较的值

        len = arr.length;

    for (i = 1; i < len; i++) {

        //将当前的值存起来以便之后用于比较

        value = arr[i];

        //如果已排序部分的值比未排序的当前值要大

        //调换它们

        for (j = i - 1; j >= 0 &&arr[j] > value; j--) {

          //往后挪一个

            arr[j + 1] = arr[j];

        }

        arr[j + 1] = value;

    }

    return arr;

}


 

参考资料

http://khan4019.github.io/front-end-Interview-Questions/sort.html

http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/

http://blog.benoitvallon.com/sorting-algorithms-in-javascript/sorting-algorithms-in-javascript-all-the-code/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值