我正在完成一些非常基本的算法练习,我对选择排序的这种实现感到困惑:
def selection_sort(xs)
len = xs.length
len.times do |i|
low = xs[i...len].min
tmp = xs[i]
xs[i] = low
xs[xs.rindex(low)] = tmp
end
xs
end
代码工作正常,但是,如果我使用xs[xs.index(low)] = tmp
而不是xs[xs.rindex(low)] = tmp
,该函数在以下测试中无法正常工作:
selection_sort([3, 6, 2, 7, 4, 1, 4, 5, 6, 7, 8, 0])
selection_sort([0, 8, 7, 6, 5, 4, 1, 4, 7, 2, 6, 3])
在我看来,这无关紧要,因为索引是来自右侧还是左侧的索引。不会使用rindex
vsindex
只是更改流程(对于重复条目),但仍会输出有序列表?
我在看什么?