2017-06-13 7 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 

このコードで何が問題になっていますか?論理的なエラーはありませんが、私はこれらの構文的なエラーを受けています。理由を理解できません。Ruby Ifステートメント

bubble_sort.rb:22:構文エラー、予期しないkeyword_end

bubble_sort.rb:26:構文エラー、予期しないkeyword_end

+3

インデントが間違っています。それを修正し、問題がより明らかになります。メモとして、 'i ++'と 'i - 'は '++'や '--'を持たない** **有効なRubyではありません。また、無意味な ';'デリミタを入れないようにする必要があります。 – tadman

+0

最初のコードブロックの後の 'end'は何ですか? –

+0

正しくインデントされていない関数です。 – ifconfig

答えて

0

適切なルビーの構文であなたのコードは次のようになります。

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 

私はあなたのロジックを変更しようとしませんでした。構文のみが変更されます。そして、私はあなたが最後に配列を返すべきだと思います。それ以外の場合、出力はゼロになります。

i++ 

変更し、それに:これはこれは、有効なRubyの構文ではありません

0

を役に立てば幸い同様

i += 1 

、これを変更:

swaps++ 

をこの目的のために:

swaps += 1 
関連する問題