排序算法

https://yuchengkai.cn/docs/zh/cs/algorithm.html#冒泡排序
这是对上面文章的算法,进行整理和学习。文章里面有比较深入和全面的前端知识,很值得如我一样的技术小白学习。
首先给出两个通用函数,并注明这个排序是升序

function checkArray (arr) {
    if (!Array.isArray(arr)) return
}

function swap (arr, x, y) {
    let temp = arr[x]
    arr[x] = arr[y]
    arr[y] = temp
}

冒泡排序

function buddle (arr) {
   checkArray(arr)
   for (let i = arr.length - 1; i > 0; i--) {
       // 从 0 到 'length - 1'遍历
       for (let j = 0; j < i; j++) {
           if (arr[j] > arr[j + 1]) swap(arr, j, j+1)
       }
   } 
   return arr
}

思路是:从数组最后一项开始遍历,将前面的元素和后一项比较,若前一项大于后一项则交换位置。

插入排序


function insertion (arr) {
    checkArray(arr)
    // 注意是从1开始
    for (let i = 1; i < arr.length; i++) {
        // 遍历i前面的元素
        for (let j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
            swap(arr, j, j + 1)
        }
    }
    return arr
}

思路:假定第一位已经排序好,再遍历后面的元素,将后面的元素和前面的所有元素比较,若前面有元素大于后面元素,则交换位置。

选择排序

function selection (arr) {
    checkArray(arr)
    // 不用遍历最后一项,因为最后一项肯定是最大值
    for(let i = 0; i < arr.length - 1; i++) {
        // 最小值的索引
      let minIndex = i
      for (let j = i + 1; j < arr.length; j++) {
          minIndex = arr[j] < arr[minIndex] ? j : minIndex
      }
      // 每次循环都交换当前项和当前项之后的最小值
      swap(arr, i, minIndex)
    }
    return arr
}

console.log(selection(test))

思路:这个算法我认为是最好了解的。除了最后一项外,遍历数组,将当前项和当前项之后的最小值交换,这样数组每个元素都比后面的元素小。

快排

待更新

添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值