我有一个整数数组,我需要排序。但结果不应包含整数值,而应包含索引。即旧阵列的新顺序。
例如:[10,20,30]
应该导致:[2,1,0]
实现此目的的优化算法是什么?
答案 0 :(得分:2)
如果将每个元素转换为(value, position)
的元组并对其进行排序,则可以使用任何排序算法实现此目的。
也就是说,[10, 20, 30]
将成为[(10, 0), (20, 1), (30, 2)]
。然后,您将使用比较器对该数组进行排序,该比较器查看元组的第一个元素,为您提供[(30, 2), (20, 1), (10, 0)]
。从这里,你可以简单地抓住每个元组的第二个元素来获得你想要的东西[2, 1, 0]
。 (假设你想要反向排序。)
答案 1 :(得分:0)
不会与任何其他排序算法不同,只需修改它以便构建或接受索引数组,然后操纵数据和索引数组而不仅仅是数据。
答案 2 :(得分:0)
你可以创建一个指向原始整数数组的指针数组,执行合并排序或者你发现最适合的排序算法(使用指针处的值)然后在列表中运行计算基于每个的指标指针包含原始整数数组的已分配块的开头的相对地址。