直接插入排序法原理及其js实现
Posted sunmarvell
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直接插入排序法原理及其js实现相关的知识,希望对你有一定的参考价值。
直接插入排序法就像我们打扑克牌时整理牌面一样,先让我们脑补一下我们打牌的过程。
首先摸了一张6,
接着摸到一张4,比6小,插到6的前面;
又摸到一张7,比6大,插到6的后面;
又摸到一张5,比6小,比4大,插到4和6中间;
。。。。
以上的过程,其实就是典型的直接插入排序,每次将一个新数据插入到有序队列中的合适位置里。
步骤:
1.首先将数组第1个数看成是一个有序序列。
2.将数组的第2个数按照关键字大小插入到这个有序序列中,插入后得到了一包含两个数的有序序列。
3.接下来再重复上面的步骤将第3,第4……第n-1个数分别插入到该有序序列中,最终得到一个包含n个数的有序序列。
很简单吧,接下来,我们要将这个算法转化为编程语言。
假设有一组无序序列 R0, R1, ... , RN-1。
(1) 我们先将这个序列中下标为 0 的元素视为元素个数为 1 的有序序列。
(2) 然后,我们要依次把 R1, R2, ... , RN-1 插入到这个有序序列中。所以,我们需要一个外部循环,从下标 1 扫描到 N-1 。
(3) 接下来描述插入过程。假设这是要将 Ri 插入到前面有序的序列中。由前面所述,我们可知,插入Ri时,前 i-1 个数肯定已经是有序了。
所以我们需要将Ri 和R0 ~ Ri-1 进行比较,确定要插入的合适位置。这就需要一个内部循环,我们一般是从后往前比较,即从下标 i-1开始向 0 进行扫描。
js代码实现
let dat=[5, 8, 10, 3, 2, 18, 17, 9]; function insertSort(data) { var temp;//用于存储需要插入的数据 //注意i从1开始,因为以j=i-1为基准数 for(let i=1;i<data.length;i++){ temp=data[i]; //将第i个数保存,以供之后插入合适位置使用 // 因为前i-1个数都是从小到大的有序序列,只要当前比较的数(data[j-1])比temp大,就把这个数后移一位 for(var j=i-1;j>=0&&data[j]>temp;j--){ //这块j得用var声明,因为在for循环之外的作用域还要用j data[j+1]=data[j]; } data[j+1]=temp;//将temp插入合适的位置 } return data; } var sortedData=insertSort(dat); console.log(sortedData);
以上是关于直接插入排序法原理及其js实现的主要内容,如果未能解决你的问题,请参考以下文章