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

Python实现插入排序处理二维数组时数字未同步排序问题求解

问题分析

你的代码存在两处问题,导致无法得到预期结果:

  • 排序比较逻辑有误:循环判断条件中currentValue1[0]是对已经是姓名字符串的取值,实际拿到的是姓名首字母,虽然当前测试用例首字母不重复没有触发姓名排序错误,但逻辑不严谨;且你逐字段移动元素的写法冗余,容易出现赋值遗漏。
  • 缺少单条记录内的数字排序步骤:你仅实现了整条[姓名, 数字1, 数字2]记录按姓名排序移动,没有对每条记录绑定的两个数字做升序排列,因此数字顺序和原始输入一致,不符合预期。
修改方案
  1. 取出当前待插入的记录时,先对记录中除姓名外的两个数字做升序排序,保证每个姓名对应的数字按从小到大排列。
  2. 修正姓名比较逻辑,直接对比完整姓名字符串,整条记录做位置移动,避免逐字段赋值的错误。
  3. 移动列表元素时使用副本,避免引用修改导致的数据异常。
修改后完整代码
def insertionsort(searchList):
  for index in range(1, len(searchList)):
    # 取出当前待插入的整条记录
    current_record = searchList[index]
    # 对当前记录绑定的两个数字做升序排列
    current_record[1], current_record[2] = sorted(current_record[1:])

    position = index
    # 按完整姓名比较,找到合适的插入位置
    while position > 0 and searchList[position-1][0] > current_record[0]:
      # 元素整体后移
      searchList[position] = searchList[position-1].copy()
      position -= 1

    # 将当前记录插入到正确位置
    searchList[position] = current_record

  return searchList

# 测试数据
test_list = [["John",23,18],
             ["Aaron",11,10],
             ["Brad",22,11]
            ]
         
print(insertionsort(test_list))
运行输出
[['Aaron', 10, 11], ['Brad', 11, 22], ['John', 18, 23]]

和预期结果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:18:24