私はあなたがルビーを学んでいることを理解して欲しいの独自のバブルソートを実装します。 a.sortは簡単ですが、何も教えていません。私はあなたがやって学ぶことがうれしいです!バブルソート方法に欠陥があります。あなたはiをインクリメントし、それを各繰り返しで配列のインデックスとして使用しています。最悪の場合、配列の要素よりもはるかに多くなるn ** 2(n 2乗)の反復が必要です。しかし、あなたのコードがうまく動いていたら、それが実行されると予想していると思ったら、配列に1回だけ渡します。
これは古典的なルビーバブルソートです。 (ユーザーがコンソールからアレイを埋めるように) 値を交換する必要がなくなるまで、ENTIRE配列を何度も処理し続けることに注意してください。ここで
def bubble_sort(array)
n = array.length
puts "Sorting your array of #{n} items"
loop do #will loop forever till we break
#When we go through the entire array
#and don't have to swap then the array
#is sorted
swapped = false
(n-1).times do |i|
print "*" #just to illustrate how many iterations occur
if array[i] > array[i+1]
array[i], array[i+1] = array[i+1], array[i] #swap these values, no pesky temp variable
swapped = true
end
end
break if not swapped #we are done exit the loop
end
array #return the sorted array
end
puts "Amount of elements in your array"
n = gets.chomp.to_i
a = []
n.times do |num|
puts "input your element #{num}"
a <<gets.chomp.to_i
end
puts a
a = bubble_sort(a)
puts "Array sorted #{a}"
は、それが達成されますが、 `一時は= [i]は` [I] = temp` `続いているあなたのwhileループではコンソール
Cyclops% ruby sort_test.rb
Amount of elements in your array
6
input your element 0
5465463
input your element 1
3421
input your element 2
432143
input your element 3
234123
input your element 4
645
input your element 5
1
5465463
3421
432143
234123
645
1
Sorting your array of 6 items
******************************
Array sorted [1, 645, 3421, 234123, 432143, 5465463]
Cyclops%
経由で実行されての一例です何もない。あなたは '' temp = a [i + 1] '' a [i + 1] = a [i] '' a [i] = temp'やもっと慣用的なルビーでは、a [i + 1] a [i] = a [i]、a [i + 1] 'である。 – GSP
うん、私は助けXDを求めた後にそれを実現した。 –