能否利用给定的稳定整数排序函数实现整数对的稳定排序?
解决方案:仅用提供的
sort函数即可实现需求 当然可以只用给定的sort函数完成按第二个元素的稳定排序,完全不需要自己编写排序逻辑!下面是具体的思路和实现步骤:
核心思路
通过构造包含原位置信息的排序键,把“按第二个元素稳定排序”的需求转化为普通的整数数组排序,利用sort的升序稳定排序特性完成目标。
具体步骤
假设我们有整数对数组P,长度为n:
- 生成排序键数组:
对每个索引i(从0开始)的整数对(a, b),计算排序键为:
这个键的设计逻辑:key = b * n + i- 若两个整数对的第二个元素
b不同,b更小的键值必然更小,排序后会排在前面; - 若两个整数对的
b相同,原索引i更小的键值会更小(因为b*n部分相等,加上更小的i结果更小),这样就能保留原数组的相对顺序,满足稳定排序的要求。
- 若两个整数对的第二个元素
- 排序键数组:
使用提供的sort函数对生成的键数组进行升序排序,得到排序后的键数组sorted_keys。 - 还原排序后的整数对数组:
遍历sorted_keys,对每个键k,计算原索引original_index = k % n,取出P[original_index],按顺序组合就是最终的排序结果。
示例验证
用你给出的示例数组验证:
原数组P = [(1,2),(1,1),(0,2),(3,2),(4,1)],n=5:
- 生成的键数组为
[10, 6, 12, 13, 9] - 经
sort排序后得到sorted_keys = [6, 9, 10, 12, 13] - 计算原索引:
6%5=1、9%5=4、10%5=0、12%5=2、13%5=3 - 取出对应元素:
(1,1),(4,1),(1,2),(0,2),(3,2),完全符合预期结果。
内容的提问来源于stack exchange,提问作者user308485
相关产品推荐
相关产品推荐

