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

选择排序中如何打印元素索引 现有实现代码不生效问题求解

选择排序过程中获取元素原索引的解决方案

问题原因

  • 你在排序逻辑中直接修改了传入的数组A,排序完成后A的元素位置已经和原数组完全不同,此时调用A.index(i)只能拿到元素在排序后数组的位置,自然是连续的0、1、2序列,不符合需求。
  • 就算你保留了原数组的拷贝,如果数组存在重复元素,index()方法只会返回第一个匹配值的索引,依然会得到错误结果。
  • 不需要使用deepcopy解决这个问题,调整索引记录的时机即可。

优化后代码

def solve(A):
    # 绑定元素值和对应的原始索引,避免修改原数组后丢失索引信息
    indexed_list = [(val, origin_idx) for origin_idx, val in enumerate(A)]
    sorted_values = []
    origin_index_sequence = []
    
    for i in range(len(indexed_list)):
        min_idx = i
        for j in range(i+1, len(indexed_list)):
            if indexed_list[min_idx][0] > indexed_list[j][0]:
                min_idx = j
        # 交换元素
        indexed_list[i], indexed_list[min_idx] = indexed_list[min_idx], indexed_list[i]
        # 同步保存排序后的值和对应原始索引
        sorted_values.append(indexed_list[i][0])
        origin_index_sequence.append(indexed_list[i][1])
    
    # 第一个返回值是排序后的数组,第二个返回值就是你需要的原索引序列
    return sorted_values, origin_index_sequence

实现说明

  • 排序逻辑基于绑定了原始索引的元组列表执行,比较时仅取元组第一个元素(原数值)进行判断,完全保留原有选择排序的逻辑特性。
  • 每次交换完成后直接从元组中提取原始索引,不需要后续回溯查询,不存在重复元素匹配错误的问题。
  • 如果你需要保留原数组不被修改,本方案不需要对原数组做任何拷贝操作,仅基于新生成的元组列表完成排序即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:36:00