2

バブル ソート法を使用して、3 つの数値のみの配列をソートしようとしています。私が使用しているコードは以下のとおりです。

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

    list
  end

my_sort([3,1,2])

これが私が得続けるエラーメッセージです:

Syntax error, unexpected $end, expecting keyword_end

私はちょうどどの端が含まれるべきではないのだろうかと思っていましたか?

4

7 に答える 7

3

あなたは行方不明ですend

  if list[i] > list[i+1]
    list[i], list[i+1] = list[i+1], list[i]
    swapped = true
  end # <--------------------------------------------------------

編集: 他の回答が言及しているように、コードをインデントして、これらのエラーをより見やすくします。

于 2012-06-19T18:27:03.017 に答える
3

endafterがありませんswapped = true。この種の問題を回避するには、コードを完全かつ正確にインデントするのが最善です。

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
于 2012-06-19T18:27:33.280 に答える
1

コードはその特定の配列に対して機能します。あなたのループは次の要素がより高いかどうかを見ているので、スワイプします。しかし、配列内の要素が増えるとどうなるでしょうか? これは、すべてのケースで再帰的なソリューションです。

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])
于 2016-07-10T22:41:39.077 に答える