思路
以升序排序为例:
- 从第二个数开始往前比较
- 比前面的数小就继续往前比较
- 在合适的位置插入该元素
- 第三个数开始往前比较
- 以此类推,进行到最后一个数
升序插入排序动画演示如图所示:
时间复杂度:O(n2)
实现
现有数组[7, 5, 4, 15, 3, 9, 6, 12]
,进行升序排序:
Array.prototype.insertionSort = function() {
// 第一个数默认已经排序
// 从第二个数开始,遍历没有排序过的数
for (let i = 1; i < this.length; i++) {
// 提取当前遍历的元素
const temp = this[i];
// 从当前元素位置往前比较
let j = i;
while (j > 0) {
// 如果前一个数比提取的数
if (this[j - 1] > temp) {
// 将前一个数后移
this[j] = this[j - 1];
} else {
// 否则退出循环
break;
}
// 每比较一次,往前进一位
j--;
}
// 遍历完成后,将提取的数插入
this[j] = temp;
}
};
const arr = [7, 5, 4, 15, 3, 9, 6, 12];
arr.insertionSort();
console.log(arr);
执行结果:
欢迎在我的博客上访问!