我是编程新手。我试图在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
答案 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]