不使用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]