插入排序

发布时间:2021-04-08 作者:yaming042 阅读量:- 本文字数:3.6k 阅读时长 ≈ 3 分钟

插入算法简单理解就是,打扑克的时候你拿到一张牌就会插入到对应的数后面,这个你拿着牌找插入位置的这个过程其实就是插入算法的过程。

这里也可以将待排序序列分为有序序列和无序序列

算法步骤

  1. 从第一个元素开始,假设第一个元素为有序序列
  2. 从第二个元素开始,依次遍历无序序列,将遍历数据n插入到有序序列合适的位置,这里就插入到有序序列中第一个小于n的数的后面。(我感觉其实就是拿无序序列中的第一个数,到有序序列中比较,然后插入到合适位置)

比如[1,2,4,5,3],当拿3比较时,

  1. 3先和5比,3比5小,那么此时5后面的一位换成5([1,2,4,5,5]),此时第一个5就 相当于 3,但并未赋值
  2. 3再和4比,3比4小,那么此时4后面的一位换成4([1,2,4,4,5]),此时第一个4就 相当于 3,但并未赋值
  3. 3再和2比,3比2大,那么此时不移动,只需要将2后面的一位赋值为3即可

过程如图
插入排序

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function insertSort(arr=[]){
let length = arr.length,
current,
preIndex;

for(let i=1;i<length;i++){
current = arr[i];
preIndex = i - 1;

// current 每次是不变的,相当于是把值暂存起来,
// 每次比较都是把前面一个元素的值赋给后面一个
while( preIndex >= 0 && current < arr[preIndex] ){
arr[preIndex+1] = arr[preIndex];
preIndex--;
}

arr[preIndex+1] = current;
}

return arr;
}

console.log( insertSort([4,3,1,72,5,2]) ) //[ 1, 2, 3, 4, 5, 72 ]