You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby插入排序(Insertion Sort)第6轮跳过交换问题排查求助

Ruby插入排序代码问题分析

以下是代码存在的两处核心问题:

  • 排序触发条件逻辑缺陷
    你的代码仅在list[i] > list[i+1]成立时,才会对前i+1位的子数组执行排序调整。第6轮(对应i=6)执行完毕后,数组为[1, 2, 4, 3, 5, 6, 7, 8, 100, 99],此时索引2的4和索引3的3为逆序,但后续外层循环i走到7时,比较的是索引7的8和索引8的100,二者顺序正常不会进入if分支,这处逆序永远不会被检测和修正,最终导致排序结果错误。
  • 数组操作写法存在隐藏bug
    代码中list = list - list2的写法不符合预期,Ruby中数组的-运算符是求差集,会自动去除所有重复元素,如果你排序的数组包含重复值,这一步会直接丢失元素,比如输入[2,2,1]时就会出现缺值问题。

修正参考代码

你可以参考标准插入排序的实现逻辑调整代码:

def insertion_sort(list)
  (1...list.length).each do |i|
    current = list[i]
    j = i - 1
    # 将当前元素往前插入到有序数组的正确位置
    while j >= 0 && list[j] > current
      list[j + 1] = list[j]
      j -= 1
    end
    list[j + 1] = current
  end
  list
end

puts insertion_sort([2,5,1,4,8,6,7,3,100,99]).inspect
# 输出:[1, 2, 3, 4, 5, 6, 7, 8, 99, 100]

内容的提问来源于stack exchange,提问作者Derek Yi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:36:03