algorithm - 具有重复项的选择排序行为

标签 algorithm sorting computer-science selection-sort

选择排序如何处理数组中的重复值?我很难在网上找到答案。

如果我有一个像 [8, 4, 7, 3, 9, 3] 这样的数组,那么选择排序将选择在数组的第一遍中交换哪个索引?

第三个索引还是第五个索引?

最佳答案

虽然您关于 3 中的交换的特定问题很容易回答,但更一般的版本并不容易,因为选择排序不是稳定

经典实现会在第三个索引处选择3,因为选择下一个要交换的元素的条件是

if (a[i] < a[iMin])

一旦第一个 3 被交换到位置 0,第二个 3 索引 5 将不会被选中。

条件意味着将根据当前算法通过之前的排列选择最早的副本。不过,这种排列可能与元素的初始排列不同。

就选择过程中的重复项而言,无法保证,因为可能会在它们之前交换较小的数字。

比如在这个初始安排

[3, 3, 1]

索引为零的 3 将最后被选中,因为第一次迭代会将它一直移动到数组的末尾。

关于algorithm - 具有重复项的选择排序行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37093528/

相关文章:

C++ STL:将派生虚拟类用作 std::sort() 的 "Strict Weak Ordering"

node.js - NodeJS中并发安全短唯一整数ID生成

algorithm - 找到从 s 到每个 v 的最短路径,并限制长度

computer-science - 创建最短的图灵完备解释器

php - 堆叠算法 - 在尽可能小的区域堆叠 3d 对象

C# 相当于使用 python 切片操作旋转列表

algorithm - 在两组之间找到重复项的有效方法是什么?

c++ - 这个给定数据结构的时间复杂度

MySQL:如何选择字段中具有最低值的行?

c++ - 如何打印 MergeSort 的所有中间步骤?