いいまとめですね!
ただ、いくつかツッコミたいところがあります笑
細かく書くと大変なので、大きくポイントを2つ。
n
が使われているにもかかわらず、並び替えBにおいて2つの要素を比べるときにも変数n
を使っていてよろしくなさそうあとは、とりあえずコードを貼っておくので、実行したりコードリーディングすると何かが分かってくるかも!
これは、todakaさんのコードを実行した際に、何が行われているか、多少わかりやすくしたものです。
中身自体は一切変えていないです。(たぶん)
# timesで作成 numbers = [3, 1, 2, 5, 11, 4, 10, 7, 8, 6] counts = numbers.size # 並び換えA counts.times do n = 1 narabikae_kaisu = counts - n p "並び替え回数: #{narabikae_kaisu}" # 並び換えB narabikae_kaisu.times do puts "#{n - 1}番目の要素と#{n}番目の要素の大小を判断し、必要であれば入れ替える" if numbers[n - 1] > numbers[n] numbers[n - 1], numbers[n] = numbers[n], numbers[n - 1] end n += 1 end end p numbers
実行結果はこんな感じです。
❯ ruby todaka-bubblesort2.rb "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える [1, 2, 3, 4, 5, 6, 7, 8, 10, 11]
こういうアウトプットまじでいいですね。
Rails以前にRubyを最低限使えないと技術面接で困ると思うのでこの辺やると良いと思います。
問題 - AtCoder Beginners Selection
Rubyで競プロするときのTips - ARMERIA ← 入出力編は押さえといた方がいいです。よく使うので。
で、これが私なりに改変してみたものです。ちょっとtodakaさんの意図をくんでないかもしれないですが。
長くなっちゃいますけど、またコードと実行結果を貼っておきます。
# timesで作成 numbers = [3, 1, 2, 5, 11, 4, 10, 7, 8, 6] counts = numbers.size n = 1 # 並び換えA counts.times do narabikae_kaisu = counts - n p "並び替え回数: #{narabikae_kaisu}" # 並び換えB narabikae_kaisu.times do |x| puts "#{x}番目の要素と#{x + 1}番目の要素の大小を判断し、必要であれば入れ替える" if numbers[x] > numbers[x + 1] numbers[x], numbers[x + 1] = numbers[x + 1], numbers[x] end end n += 1 end p numbers
❯ ruby todaka-bubblesort3.rb "並び替え回数: 9" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える 8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 8" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える 7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 7" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える 6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 6" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える 5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 5" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える 4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 4" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える 3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 3" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える 2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 2" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える 1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 1" 0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える "並び替え回数: 0" [1, 2, 3, 4, 5, 6, 7, 8, 10, 11]
あ、だいそんさんの投稿をサンドイッチしてしまいました。。。
p や puts でデバッグしたり、あと調べるとデバッグツールというのがあるので、
そのあたりを使いながら実際に実行結果が想定どおりか考えてみるといいですよ!
日曜日とかに、タイミングがあえば、話せると面白そう!!
byebug
入れてデバッグするのもめちゃ大事すね!
コメント遅くなってしまいすみません💦
ご指摘いただきありがとうございます!(しかもめちゃ早い。。!)
自分でも試してみましたが、確かに日本語の理解とコードが違いますね。
もう少し試してみて、コードも修正したいと思います。
明日は空いてますので、お話できると嬉しいです!
すごいです。(語彙力低くてすいません)
勉強になりました。
アウトプットってすごく刺激的ですね。書く方も読む方も。
いけるかは未定ですが、日曜であれば新参者ですがお話に混ぜていただけたらうれしいです。
アウトプットってすごく刺激的ですね。書く方も読む方も。
オリジナルアプリと同じくらいこういう「試行錯誤のログ」は大事ですね!!
ちなみにbyebug
はこんな風に書きます。
require 'byebug' def bubble_sort(args) byebug length = args.length ary end p bubble_sort([3,2,1,0])
皆さん、コメントいただきありがとうございます!
みけたさんの指摘を自分なりに解釈しアウトプットに追記しましたので、ご確認いただけないでしょうか🙇♀️