#每天一个知识点#
3. 插入排序(Insertion Sort)
function insertionSort(arr) {
const len = arr.length;
for (let i = 1; i < len; i++) {
let j = i - 1;
const current = arr[i];
while (j >= 0 && arr[j] > current) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = current;
}
return arr;
}

// 示例
const arr = [5, 3, 8, 4, 2];
console.log(insertionSort(arr)); // output: [2, 3, 4, 5, 8]
插入排序的时间复杂度为 O(n^2),其中n代表数组的长度。虽然插入排序时间复杂度和冒泡排序、选择排序同样地为 O(n^2),但是在数据规模较小的时候,它比冒泡排序和选择排序更快,是一个稳定的排序算法。

空间复杂度为 O(1),它只需要一个临时变量来存储当前处理的元素,对空间复杂度没有额外的开销。

插入排序的基本思想是:对于每个未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序相比于冒泡排序和选择排序,不需要进行太多的元素交换操作,而是通过移动元素来完成排序,在一些特定情况下效率更高一些。当数据集合基本有序时,插入排序的时间复杂度将大大降低,甚至可以达到线性级别,优化效果比较明显。
展开
评论