插入排序、冒泡排序、快速排序

插入排序
【类似摸牌排序】

  let handle = [];
  handle[0] = ary[0]; // 开始随便拿一张牌
  for (let i = 1; i < ary.length; i++) {//从第二张开始循环摸牌
    const A = ary[i];
    for (let j = handle.length; j >= 0; j--) {
    // 将摸到的牌和手里的牌循环对比
      const B = handle[j];
      if (A > B) {// 如果摸到的牌大于循环到的当前的牌就放到这个牌的前面
        handle.splice(j + 1, 0, A);
        break;
      }
      if (j === 0) {
      // 如果已经比较到手上的最后一张牌还是没有比较完成
      // ,就放到最前面
        handle.unshift(A);
      }
    }
  }

  return handle;
}

var ary = [21,11,23,26,3,20,16];
var ary = sortInsertAry(ary);
console.log(ary);// [3, 11, 16, 20,21, 23, 26]

冒泡排序
第二个循环-i的原因是:
每一轮晚后,最大的永远被专递到后面了,所以下一次就不需要比较已经排好的了,
var ary = [2, 1, 2, 7, 1, 3];

function sortAry(ary) {
  for (let i = 0; i < ary.length - 1; i++) {
    for (let j = 0; j < ary.length - 1 - i; j++) {
      if (ary[j] > ary[j + 1]) {
        [ary[j + 1], ary[j]] = [ary[j], ary[j + 1]];
      }
    }
  }
  return ary;
}

var ary = sortAry(ary);
console.log(ary);//【 1,1,2,2,3,7】

快速排序

function sortQuikAry(ary) {
  if (ary.length <= 1) {// 最后只有一个元素的时候组件返回当前数组即可
    return ary;
  }
  // 拿到中间元素下标
  const centerIndex = Math.floor(ary.length / 2);
  // 拿到中间元素,并在原数组中删除该元素
  const centerValue = ary.splice(centerIndex, 1)[0];

  let leftAry = []; // 小于中间元素的数组集合
  let rightAry = [];// 大于中间数组的数组集合
  for (let i = 0; i < ary.length; i++) {
    const item = ary[i];
    if (item > centerValue) {
      rightAry.push(item);// 加入大于中间元素的数组
    } else {
      leftAry.push(item);// 加入小于中间元素的数组
    }
  }
  // 递归
  return [...sortQuikAry(leftAry), centerValue, ...sortQuikAry(rightAry)];
  // return sortQuikAry(leftAry).concat(centerValue, sortQuikAry(rightAry));
}

var ary = [21, 11, 23, 26, 3, 20, 16];
var ary = sortQuikAry(ary);
console.log(ary);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值