---排序

 

目录

 

[1]快排

[2]冒泡

[3]选择排序

[4]插入排序


[1]快排

 <script>
      // 快排
      // 原理:使用递归,确定递归边界:开始位置>=结束位置
      // 先将开始位置的数据保存----比开始位置数据大的放在右边,比开始位置小或者小于开始位置的放在左边;

      function getNum (arr, i, j) {
        // 二分查找使用的递归,确定递归边界
        if (i >= j) {
          return
        }
        let mid = arr[i]
        let left = i
        let right = j
        while (left < right) {
          // 先从右指针开始比较的原因:左边第一个数据(也就是目前左指针的位置)已经保存了,可以覆盖
          while (arr[right] > mid && left < right) {
            right--
          }
          arr[left] = arr[right]
          while (arr[left] <= mid && left < right) {
            left++
          }
          arr[right] = arr[left]
        }
        arr[left] = mid
        getNum(arr, left + 1, j)
        getNum(arr, i, left - 1)
      }
      let arr = [5, 6, 8, 3, 2, 1]
      getNum(arr, 0, arr.length - 1)
      console.log(arr)
    </script>

[2]冒泡

 <script>
      // 冒泡原理:两层for循环
      // 第一层:表示排序次数,(每排序一次,有一个数据有序,最后一个自动有序)
      // 第二层:两两进行比较
      function sort (arr) {
        for (let i = 0; i < arr.length - 1; i++) {
          for (let j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
              let t = arr[j]
              arr[j] = arr[j + 1]
              arr[j + 1] = t
            }
          }
        }
      }
      let arr = [1, 5, 3, 1, 6, 7, 8, 3, 2]
      sort(arr)
      console.log(arr)
    </script>

[3]选择排序

 <script>
      // 选择排序原理:从所有无序数据找出最大/最小的(下标为i之前的数据有序),与i进行交换(双层for循环)
      function sort (arr) {
        for (let i = 0; i < arr.length - 1; i++) {
          let flag = i
          for (let j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[flag]) {
              flag = j
            }
          }
          let t = arr[i]
          arr[i] = arr[flag]
          arr[flag] = t
        }
      }
      let arr = [1, 5, 3, 1, 6, 7, 8, 3, 2]
      sort(arr)
      console.log(arr)
    </script>

[4]插入排序

  <script>
      // 插入排序---扑克牌原理
      // 遍历每一个元素 ,将当前元素与其前面的元素作比较,若是比其大/小就插入,否则就继续向前比较
      // 只要是前面还有数据就进行比较
      function sort (arr) {
        let perIndex // 前一个数的下标
        let current // 当前元素
        for (let i = 0; i < arr.length; i++) {
          perIndex = i - 1
          current = arr[i]
          // 只要还没有找到比起小的元素,就继续向前寻找至下标为0
          while (perIndex >= 0 && arr[perIndex] > current) {
            // 元素后移动
            arr[perIndex + 1] = arr[perIndex]
            perIndex--
          }
          // 找到--插入
          arr[perIndex + 1] = current
        }
      }
      let arr = [1, 5, 3, 1, 6, 7, 8, 3, 2]
      sort(arr)
      console.log(arr)
    </script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值