学习目标:
- 掌握插入排序
学习内容:
- 基本思想
- 时间复杂度
- 空间复杂度
- 动画演示
基本思想:
- 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
- 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。
时间复杂度:O(n^2)
空间复杂度:O(1)
动画演示:
插入排序
- 代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>插入排序</title>
</head>
<body>
<script>
function insert(arr) {
// 1.准备一个新数组,用来存储抓到手里的牌,开始先抓一张牌进来
let handle = []
handle.push(arr[0])
// 2.从第二项开始依次抓牌,一直到把台面上的牌抓光
for (let i = 1; i < arr.length; i++) {
// a是新抓的牌
let a = arr[i]
// 和handle手里的牌依次比较(从后往前比)
for (let j = handle.length - 1; j >= 0; j--) {
// 每一次要比较的手里的牌
let b = handle[j]
//如果当前新牌a比要比较的的牌b大了,把a放到b的后面
if (a > b) {
handle.splice(j + 1, 0, a)
break
}
//已经比到第一项,我们把新牌放到手中最前面即可
if (j === 0) {
handle.unshift(a)
}
}
}
return handle
}
let arr = [8, 5, 7, 2, 1, 4, 3]
arr = insert(arr)
console.log(arr)
</script>
</body>
</html>