在Ruby中实现快速排序

时间:2015-02-06 22:26:15

标签: ruby

我是编程新手。我试图在Ruby中实现快速排序算法。我无法在网上找到很多可以破译得很好的例子。我有浮点数,整数和字符串。 我需要帮助它使用数组中的重复项。 例如,它适用于:     [-13, 12, 589, 11, 0, 27, 36, 92, 7, -2, 1001] 但不是:     [3, 2, 1, 1, 2, 3]

提前谢谢!

def quick_sort(list, start_point = nil, end_point = nil)
  if start_point && end_point
    if start_point >= end_point
     return list
    end
    left = start_point
    right = end_point
    pivot = left
  else
    left = 0
    right = list.count - 1
    pivot = left
  end

  min = left
  max = right

  while left < right
    if list[pivot] < list[right]
      right -= 1
    else
      list[pivot], list[right] = list[right], list[pivot]
      pivot = right
    end

    if list[pivot] > list[left]
      left += 1
    else
      list[pivot], list[left] = list[left], list[pivot]
    pivot = left
    end
  end
  quick_sort(list, min, pivot -1) 
  quick_sort(list, pivot +1, max) 
end

1 个答案:

答案 0 :(得分:1)

问题是您用来确定最高索引值的代码。

right = list.index(list[-1])

这基本上是说“给我最后一个元素中的值的索引”,但最后一个元素值是3,不幸的是它也是第一个元素的值,所以它返回0(第一个)发现它所发现的价值。)

更好的是......

right = list.count - 1

编辑也是,你应该在比较值时处理两个值相同的条件......这个条件应该被视为'不需要交换'

所以而不是

if list[pivot] < list[right]
...
if list[pivot] > list[left]

DO

if list[pivot] <= list[right]
...
if list[pivot] >= list[left]