不使用Sort方法在Ruby中对数组进行排序
我正在尝试使用冒泡排序方法对仅有三个数字的数组进行排序。 我正在使用的代码如下。
def my_sort(list) return list if list.size list[i+1] list[i], list[i+1] = list[i+1], list[i] swapped = true end end list end my_sort([3,1,2])
以下是我不断收到的错误消息:
Syntax error, unexpected $end, expecting keyword_end
我只是想知道不应该包括哪一端?
在swapped = true
之后你错过了一个end
。 最好是彻底准确地缩进代码以避免这种问题:
def my_sort(list) return list if list.size <= 1 swapped = false while !swapped swapped = false 0.upto(list.size-2) do |i| if list[i] > list[i+1] list[i], list[i+1] = list[i+1], list[i] swapped = true end end end list end
你错过了一个end
if list[i] > list[i+1] list[i], list[i+1] = list[i+1], list[i] swapped = true end # <--------------------------------------------------------
编辑:正如其他答案所提到的,缩进代码以使这些错误更加明显。
您的代码适用于该特定数组。 因为你的循环正在查看下一个元素是否更高,然后滑动。 但是arrays中的更多元素呢? 这是所有情况的递归解决方案。
def my_sort(list, new_array = nil) return new_array if list.size <= 0 if new_array == nil new_array = [] end min = list.min new_array << min list.delete(min) my_sort(list, new_array) end puts my_sort([3, 1, 2, 20, 11, 14, 3, 6, 8, 5])
#Using bubble sort algorithm in ruby a = [1,5,7,2,3,50,78,34,89] a.size.times.each do |t| i=0 a.each do |b| if b > a[i+1] a[i],a[i+1] = a[i+1],a[i] end i+=1 if i < a.size-2 end end print a #output: [1, 2, 3, 5, 7, 34, 50, 78, 89]