排序算法详解

排序算法

冒泡排序:
冒泡排序展示

  // 冒泡
  var arr = [1, 78, 3, 6, 9, 2, 5, 4, 7, 8];
  // 确定每一轮的比较次数,每次比较都会对比两个数大小,如果后面的数比前面的大就交换位置
  // 第一轮可以确定一个最大的数,第二轮可以确定第二大的数,第三轮可以确定第三大的数,以此类推
  // 轮到最后一轮,最后一轮只有一个数,不需要比较,所以比较次数为arr.length - 1
  for (let i = 0; i < arr.length - 1; i++) {
  
    // arr.length - 1 - i 为每一轮的比较次数,因为每比较完一轮,都会确定一个最大数,所以每比较完就少一个比较
    for (let j = 0; j < arr.length - 1 - i; j++) {
      // 交互数字位置
      const element = arr[j]; // 原数字
      if (element > arr[j + 1]) {
        // arr[j] = arr[j + 1]; // 后一个数字
        // arr[j + 1] = element; // 原数字
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // 简化写法
      }
    }
  }
  console.log(arr); // (10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 78]

选择排序:
选择排序展示

  // 选择排序是一种简单的排序算法,它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
  var arr = [1, 78, 3, 6, 9, 2, 5, 4, 7, 8];
  // 一轮比较完成后,最小的数字会被放在最前面 所以轮数为 arr.length - 1
  for (let i = 0; i < arr.length - 1; i++) {
    let minIndex = i; // 记录一个最小的下标
    // 记录当前这一轮的最小值
    //  i + 1 拟定为下一轮的最小值
    for (let j = i + 1; j < arr.length; j++) {
      // 如果当前这一轮的最小值比下一轮的最小值大,就重新赋值(记录)一个最小值
      if (arr[j] < arr[minIndex]) {
        minIndex = j;
      }
    }
    // 每轮交换位置,将记录下的最小值放在最前面
    if (minIndex !== i) {
      [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
    }
  }
    console.log(arr); //(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 78]

后续还会继续补充更多算法,敬请关注~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值