每天一个排序算法 ---插入排序

230 阅读1分钟

插入排序每次排一个数组项,以此方式构建最后的排序数组。

每次排的数组项依次增加1,第一次需要排序的数组项为1,第二次为2,直到需要排序数组的长度。

思路
数组长度为n
需要排n轮
每轮需要比较 ->直到当前比较的数大于前面排好的数组项为止 每次比较满足条件就交换位置

let array = [5, 4, 3, 2, 1]
for(let i = 0; i < array.length; i++){
  let j = i
  let tem = array[i]
  while(j > 0 && tem < array[j - 1]){
    [array[j],array[j-1]] = [array[j-1],array[j]]	// 解构赋值
    j--
  }
}
console.log(array)

插入排序算法的关键点在于,从少到多这个过程,每次都是排好序的。
使用while循环不使用for循环是更符合语义的。
插入排序在需要排序的数据少的情况下,比冒泡排序和选择排序要快,因为插入排序的每轮的比较次数100%都是比较最少次数。