手写插入排序
Posted 前端精髓
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写插入排序相关的知识,希望对你有一定的参考价值。
插入排序类似于人类按数字或字母顺序对数据进行排序。例如,让班里的每个学生上交一张写有他的名字、学生证号以及个人简介的索引卡片。学生交上来的卡片是没有顺序的,但是我想让这些卡片按字母顺序排好,这样就可以很容易地与班级花名册进行对照了。
我将卡片带回办公室,清理好书桌,然后拿起第一张卡片。卡片上的姓氏是 Smith 。我把它放到桌子的左上角,然后再拿起第二张卡片。这张卡片上的姓氏是 Brown 。我把 Smith右移,把 Brown 放到 Smith 的前面。下一张卡片是 Williams ,可以把它放到桌面最右边,而不用移动其他任何卡片。下一张卡片是 Acklin 。这张卡片必须放在这些卡片的最前面,因此其他所有卡片必须向右移动一个位置来为 Acklin 这张卡片腾出位置。这就是插入排序的排序原理。
插入排序有两个循环。外循环将数组元素挨个移动,而内循环则对外循环中选中的元素及它后面的那个元素进行比较。如果外循环中选中的元素比内循环中选中的元素小,那么数组元素会向右移动,为内循环中的这个元素腾出位置,就像之前介绍的姓氏卡片一样。
下面展示了插入排序的代码
function insert_sort (A) {
for (let j = 1, len = A.length; j < len; j++) {
const key = A[j]
let i = j - 1
while (i >= 0 && A[i] > key) {
A[i + 1] = A[i]
i--
}
A[i + 1] = key
}
}
如果把数组 [5, 4, 3, 2, 1]
进行排序
第1轮要进行1次比较,得到4, 5, 3, 2, 1
第2轮要进行2次比较,得到3, 4, 5, 2, 1
第3轮要进行3次比较,得到2, 3, 4, 5, 1
第4轮要进行4次比较,得到1, 2, 3, 4, 5
算法复杂度是O(n^2)
完
以上是关于手写插入排序的主要内容,如果未能解决你的问题,请参考以下文章