2017-06-13 82 views
-3
def bubble_sort(array) 
    swaps = 0; 
    i = 0; 
    last = array.length - 1 

    while swaps > -1 
     if i == last 
      i = 0 
      last-- 
      swaps = 0 

      if swaps < 1 
       swaps = -1 
      end 
     end 

     if array[i] > array[i+1] 
      temp = array[i] 
      array[i] = array[i+1] 
      array[i+1] = temp 
      swaps++ 
     end 
     i++ 
    end 
end 

这段代码有什么问题?没有逻辑错误,但我得到这些语法错误,并找不到原因。红宝石如果陈述

bubble_sort.rb:22:语法错误,意想不到的keyword_end

bubble_sort.rb:26:语法错误,意想不到的keyword_end

+3

您的缩进是错误的。解决这个问题将会变得更加明显。注意,'i ++'和'i - '不是**有效的Ruby,因为它没有'++'或'--'。你也应该避免使用无意义的'''分隔符。 – tadman

+0

你的第一个代码块之后是什么'end'? –

+0

这是没有正确缩进的功能。 – ifconfig

回答

0

你适当的Ruby语法的代码如下所示。

def bubble_sort(array) 
    swaps = 0 
    i = 0 
    last = array.length - 1 

    while swaps > -1 
     if i == last 
      i = 0 
      last -= 1 
      swaps = 0 

      if swaps < 1 
       swaps = -1 
      end 
     end 

     if array[i] > array[i+1] 
      temp = array[i] 
      array[i] = array[i+1] 
      array[i+1] = temp 
      swaps += 1 
     end 
     i += 1 
    end 
end 

我没有试图改变你的逻辑。只有语法被改变。我想你应该在最后返回数组。否则,输出将为零。希望这有助于

0

这不是有效的Ruby语法:

i++ 

将其更改为:

i += 1 

同样,改变这种:

swaps++ 

要这样:

swaps += 1