概念
把数组分成两部分,一部分是有顺序的,第二部分是没有顺序的,从没有顺序的数组中拿出来一个,把他排在有序数组中的相应位置
时间复杂度
最好:O(n),原数组已经是升序的。
最坏:O(n²)
平均:O(n²)
代码
// 插入算法
function insert_sort(arr) {
let leg = arr.length
for (let i = 1; i < leg; i++) {
let value = arr[i]
let j = i - 1;
for (; j >= 0; j--) {
if (arr[j] > value) {
arr[j + 1] = arr[j]
} else {
break
}
}
arr[j + 1] = value
}
}
var sortArr = [9, 6, 3, 5, 2, 1, 7, 343, 6, 643, 243, 544, 5, 63, 234, 0, 56, 123]
insert_sort(sortArr)
console.log(sortArr)
// [0, 1, 2, 3, 5, 5, 6, 6, 7, 9, 56, 63, 123, 234, 243, 343, 544, 643]
解释
let value = arr[i] // 是从没有顺序的数组中取出来的 比较做的数
let j = i-1 // 是有序数组的长度
for (; j >= 0; j--) { //遍历有序数组从大往小遍历
// 从大往小,如果这个值比value大,当前的位置不是value,要把他后面的数全部往后移动一位,如果这个值比value小,说明当前位置是value的地方,
if (arr[j] > value) {
arr[j + 1] = arr[j]
}
arr[j + 1] = value // 把当前的位置放上value
本文深入讲解插入排序算法的实现原理,包括将数组分为有序和无序两部分,通过比较和移动元素来完成排序过程。文章提供了算法的时间复杂度分析,包括最好、最坏和平均情况,并附带了JavaScript代码示例。

被折叠的 条评论
为什么被折叠?



