JavaScript(关于排序算法) - 冒泡排序,选择排序,插入排序,快速排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

排序算法是JavaScript开发中最常用的算法之一这里举例了4种其中快速排序是效率最高的。


提示:以下是本篇文章正文内容,下面案例可供参考

一、 冒泡排序

冒泡排序是最基础的排序方法
用冒泡排序,对输入的6个数进行排序
思路:输入6个无序的数字,从头到尾依次比较相邻两个数字大小,若大数在前、小数在后,则交换两数位置,依次比较,使全部数据按从小到大排列
步骤

  1. 逐层冒泡 大悦城执行的冒泡执行比较的次数为对前的长度-1
  2. 冒泡的总次数为长度-1
  3. 和j+1比 比完位置交换
  4. 冒泡的比较次数一次比一次少 最后一次结束

例如: 将数组[8,9,7,6,5,4]进行升序排序[4,5,6,7,8,9]
冒泡排序
冒泡排序
冒泡排序
代码

 // 冒泡排序 逐次冒泡到上面去
      var arr = [8,9,7,6,5,4];
      function bubbleSort(array) {
        // 冒泡的次数
        for (var i = 1; i < array.length; i++) {
          for (var j = 0; j < array.length - i; j++) {
            //记录比较次数
            // 比较
            if (array[j] > array[j + 1]) {
              //换位置
              var temp = array[j]; //先保留j的位置
              array[j] = array[j + 1]; //将j+1位置的值赋个j+1的位置
              array[j + 1] = temp;
            }
          }
        }
      }

      bubbleSort(arr);
      console.log(arr.join(","));

二、选择排序

思路步骤

  1. 每次选择当前的第一个数为最小值
  2. 这个值跟后面的所有去比较 然后对应的比我这个值还小 把下标记录起来
  3. 将这个下标赋值给min
  4. 判断min是否是我前面给到的值 如果是不做操作 如果不是交换位置

代码

// 选择排序
	var arr = [1, 3, 8, 5, 7, 6, 2];
      function selectorSort(array) {
        for (var i = 0; i < array.length - 1; i++) {
          //设置第一个数为最小值
          var min = i;
          for (var j = i + 1; j < arr.length; j++) {
            if (array[min] < array[j]) {
              //如果比最小值还小
              min = j; //使用min记录一下这个值
            }
          }
          if (min != i) {
            //min不指向我们开始指定的下标
            var temp = array[i];
            array[i] = array[min];
            array[min] = temp;
          }
        }
      }
      selectorSort(arr);
      console.log(arr);

三、插入排序

方法1

从前往后比

//插入排序(第一种)
var arr = [5, 9, 4, 3, 1, 8, 2, 6];
      function insertion(array) {
        for (var i = 1; i < array.length; i++) {
          var preIndex = i - 1; //获取前一个下标
          var current = array[i]; //先保存当前的值 为防止
          while (preIndex >= 0 && current < array[preIndex]) {
            //如果前一个下标等于0 和 当前的值为小于是一个
            array[preIndex + 1] = array[preIndex]; //将本身这个位置的值赋值为是一个
            preIndex--; //递减 继续往前走
          }
          array[preIndex + 1] = current; //当前的位置的值等于原本位置的值
        }
      }

      insertion(arr);
      console.log(arr);

方法2

从后往前比

  //插入排序
      //从后往前比 初始下标为1
      var arr = [5, 9, 4, 3, 1, 8, 2, 6];
      function inserSort(array) {
        for (var i = 1; i < array.length; i++) {
          for (var j = i; j > 0; j--) {
            if (array[j - 1] > array[j]) {
              var temp = array[j - 1];
              array[j - 1] = array[j];
              array[j] = temp;
            }
          }
        }
      }
      inserSort(arr);
      console.log(arr);

四、快速排序

开始排序是效率最高的推荐使用
快速排序是核心就是二分法

//   快速排序
      var arr = [1, 3, 8, 5, 6, 2]; //length7 中间值为4
      function quickSort(arr) {
        if (arr.length <= 1) {//长度为1或者小于1退出
          return arr;
        }
        var centerIndex = Math.round(arr.length / 2);//取中间值下标
        var center = arr.splice(centerIndex, 1)[0];//接收删除的中间值
        var left = [];//左边的数组
        var right = []; //右边的数组
        for (var i = 0; i < arr.length; i++) {//循环遍历
          if (arr[i] < center) {//小于中间值 加到左边
            left.push(arr[i]);
          } else {
            right.push(arr[i]);//大于中间值 加到左边
          }
        }
        return quickSort(left).concat([center], quickSort(right));//返回合并的数组
      }

      console.log(quickSort(arr));

总结

以上就是今天要讲的内容,本文仅仅简单介绍了几种排序的基础使用, 排序算法能使我们快速便捷地处理数组的排序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值