请教:我实现的算法是否为Insertion Sort?求DSA学习指导
你的代码确实属于插入排序的实现
你的这段代码完全符合插入排序的核心逻辑:将未排序区间的元素逐个向前与已排序区间的元素对比,通过交换找到其在已排序区间的正确位置,最终完成整个数组的排序。
核心逻辑对应分析
- 外层
for循环遍历数组的每个元素,相当于依次取出未排序区间的元素 - 内层
while循环负责将当前元素向前逐个比较,若当前元素更小则交换位置,直到它处于已排序区间的合适位置为止
小优化建议
外层循环可以从i=1开始(而非i=0),因为当i=0时,num-1=-1,访问number[-1]会得到undefined,此时number[num] < number[num-1]的结果为false,循环不会执行,从i=1开始更贴合插入排序的常规实现,也能减少一次无意义的循环迭代。优化后的代码如下:
function insertion(number){ let length = number.length; for(let i = 1; i < length; i++){ let num = i; while(num > 0 && number[num] < number[num-1]){ let temp = number[num-1]; number[num-1] = number[num]; number[num] = temp; num--; } } return number; } console.log(insertion([3,2,4,6,5,1,2,-1]))
原代码及运行结果
原代码:
function insertion(number){ let length = number.length; for(let i = 0; i< length; i++){ let num = i; while(number[num] < number[num-1]){ let temp = number[num-1]; number[num-1] = number[num]; number[num] =temp; num--; } } return number; } console.log(insertion([3,2,4,6,5,1,2,-1]))
运行结果:
Output = [ -1, 1, 2, 2, 3, 4, 5, 6 ]
内容的提问来源于stack exchange,提问作者Kunal Ahire
相关产品推荐
相关产品推荐

