手写插入排序

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)


以上是关于手写插入排序的主要内容,如果未能解决你的问题,请参考以下文章

手写插入排序算法

手写希尔排序算法

面试官:手写一个插入排序,并对其改进

手写算法:插入排序

算法(插入排序----手写5种方法)

手写插入排序