选择排序的修改。理论上似乎是正确的,但没有给出结果

Modification to Selection Sort. Theoretically seems correct but doesn't give the results

我正在学习 ruby,我的方法是学习和实施排序算法。在进行选择排序时,我尝试将其修改如下:

这似乎并不适用于所有情况。我在逻辑上遗漏了什么吗?如果逻辑正确,我将重新审视我的实现,但目前我还无法找出问题所在。

请帮忙。

更新:这是我执行这种排序的方法的代码:

def mss(array)
  start = 0;
  stop = array.length - 1;
  num_of_pass = 0
  num_of_swap = 0
  while (start <= stop) do
    num_of_pass += 1
    min_val = array[start]
    max_val = array[stop]
    min_pos = start
    max_pos = stop
    (start..stop).each do
      |i|
      if (min_val > array[i])
        min_pos = i
        min_val = array[i]
      end
      if (max_val < array[i])
        max_pos = i
        max_val = array[i]
      end
    end
    if (min_pos > start)
      array[start], array[min_pos] = array[min_pos], array[start]
      num_of_swap += 1
    end
    if ((max_pos < stop) && (max_pos != start))
      array[stop], array[max_pos] = array[max_pos], array[stop]
      num_of_swap += 1
    end
    start += 1
    stop -= 1
  end
  puts "length of array = #{array.length}"
  puts "Number of passes = #{num_of_pass}"
  puts "Number of swaps = #{num_of_swap}"
  return array
end

这个问题可以用这个输入数组来演示

7 5 4 2 6

第一次搜索数组后,我们有

start   = 0
stop    = 4
min_pos = 3
min_val = 2
max_pos = 0    note: max_pos == start
max_val = 7

第一个 if 语句将交换 27,将数组更改为

2 5 4 7 6

第二个 if 语句不会移动 7 因为 max_pos == start。结果,6 停留在数组的末尾,这不是您想要的。