插入排序
示意图
实现
function insertionSort(arr) {
const len = arr.length
for (let i = 1; i < len; i++) {
let key = arr[i]
let j = i - 1
while(j >= 0 && key < arr[j]) {
arr[j+1] = arr[j]
j--
}
arr[j+1] = key
console.log(arr)
}
return arr
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
分析
注意:如果插入时发现前一位置与插入值相等,则插入在其后。
优化
二分法插入排序
function insertionSort(arr) {
const len = arr.length
for (let i = 1; i < len; i++) {
let key = arr[i]
let left = 0, right = i - 1
while(left <= right) {
let middle = Math.floor((left + right)/2)
if (key < arr[middle]) {
right = middle - 1
} else {
left = middle + 1
}
}
for (let j = i - 1; j >= left; j--) {
arr[j+1] = arr[j]
}
arr[left] = key
}
return arr
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20