选择排序如何处理数组中的重复值?我很难在网上找到答案。
如果我有一个像 [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/