modSwapSort排序函数为何实现降序?原以为其逻辑为升序排列
代码排序逻辑差异解答
首先你说的原本正确的升序版本,是典型的选择排序实现:
- 内层循环
j从i+1开始遍历,只会对比i后面未排序的元素 - 每一轮
i的循环只会把未排序区间里更小的数换到i的位置,i前面的元素都是已经排好的升序序列,不会被改动,最终整体就是升序结果。
你现在改后的版本逻辑完全变了,最终输出降序的原因如下:
- 内层循环
j现在会遍历整个列表的所有下标,不再局限于i之后的位置 - 交换条件
if L[j] < L[i]的作用变成:只要任意位置的数比当前i位置的数小,就把更小的数换到j的位置,更大的数换到i的位置 - 每一轮
i的循环跑完,i位置最终会留下当前所有未被固定到前序位置的最大数,而且遍历过程会把之前放到前面的小数重新换到后面的位置 - 多轮循环跑完后,越大的数会被逐步换到越靠前的位置,最终结果自然就是降序。
你可以拿短列表手动模拟一遍交换过程,就能很清楚看到每一步的变化逻辑。
内容的提问来源于stack exchange,提问作者Beets Noms
相关产品推荐
相关产品推荐

