常识小站
第二套高阶模板 · 更大气的阅读体验

插入排序方法详解 日常维护方法与实用案例

发布时间:2025-12-16 22:07:17 阅读:164 次

插入排序是什么?

你有没有整理过扑克牌的经历?比如一开始手里没牌,然后一张张拿牌,每拿到一张,就把它插到手里已排好序的位置中。插入排序就是这么个思路——一边遍历数据,一边把当前元素“插”到前面已经排好序的部分里的正确位置。

这种方法在数据量小或者接近有序的情况下特别快,虽然不适合处理几万条以上的数据,但在一些实际场景里还挺实用,比如你在写一个小工具,需要对几十个数字排序,用它就很顺手。

插入排序的核心思想

假设有一个数组,从第二个元素开始,逐个取出当前元素,然后和它前面的元素比较。只要前面的元素比它大,就把那个元素往后挪一位,直到找到合适的位置,把当前元素放进去。

这个过程就像排队时有人插队,但他是按顺序找位置,不是乱来。他从队尾往前看,发现前面的人比自己高,就继续往前走,直到找到第一个不比自己高的,然后站到那个人后面。

代码实现(以 JavaScript 为例)

function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
let current = arr[i]; // 拿出当前要插入的数
let j = i - 1; // 从它前一个位置开始比较

// 往前找,只要前面的数比 current 大,就往后移
while (j >= 0 && arr[j] > current) {
arr[j + 1] = arr[j];
j--;
}

// 找到位置了,把 current 放进去
arr[j + 1] = current;
}
return arr;
}

举个例子,数组 [5, 2, 4, 6, 1, 3],从第二个数 2 开始处理。2 比 5 小,所以 5 往后挪,2 插到前面;接着是 4,它比 5 小但比 2 大,就插在 2 和 5 中间……一步步下来,整个数组就排好了。

什么时候适合用插入排序?

如果你的数据本来就差不多有序,比如用户输入的成绩列表,偶尔有几个新成绩加进来,这时候用插入排序效率很高。因为它遇到已经排好的部分可以很快跳过。

另外,在一些高级排序算法里,比如快速排序的优化版本,当子数组变得很小时,会切换成插入排序来收尾,就是因为小规模数据下它更稳定、开销小。

不过要是数据太多,比如上万条,那它的速度就明显跟不上了,毕竟最坏情况下时间复杂度是 O(n²)。这时候还是得靠归并、快排这些更猛的算法。

简单但不简陋

插入排序看起来简单,甚至有点“土”,但它逻辑清晰,代码短,容易理解,调试起来也方便。对于刚学算法的人来说,它是理解排序本质的好起点。下次你写个小脚本要排个序,不妨试试它,说不定正合适。