###状況
githubのGist?でバブルソートに関するコードを探していたら下記のコードを見つけ理解しようとしたところ、
bubblingメソッドでつまづきました。
###前提・実現したいこと
バブルソートの処理を行うメソッド bubblingメソッドの処理を理解できないためご質問致します。お手すきの時によろしくお願い申し上げます。
###理解したいコード
def bubbling (length - 1).times do |i| self[i], self[i+1] = self[i+1], self[i] if self[i] < self[i+1] end delete_at(-1) end p [3, 1, 5, 6, 10, 9].bubble_sort
疑問1 timesメソッドの繰り返しを行いたいオブジェクトに記述されているlengthは何を示すのか?? =>これは[3, 1, 5, 6, 10, 9]の長さを表していると仮定しています。 疑問2 self[i], self[i+1] = self[i+1], self[i] if self[i] < self[i+1]のコード部分は全く理解できていないため、 詳しく解説していただければと思います。 疑問3 delete_at(-1)のコードは何を減算しているのかが理解できていません。
###全てのソースコードと理解しているところまでの記述
class Array def bubble_sort ary = self.dup res = [] res.push ary.bubbling until ary.empty? return res end def bubbling (length - 1).times do |i| self[i], self[i+1] = self[i+1], self[i] if self[i] < self[i+1] end delete_at(-1) end end p [3, 1, 5, 6, 10, 9].bubble_sort 解説 アルゴリズム/バブルソートの学習 ソートのアルゴリズムの一つで隣接交換法とも言われる。 隣り合う要素の大小を比較しながら整列させること bubble_sortメソッド 1 Arrayクラスを生成する 2 bubble_sortメソッドを呼び出す 3 bubblingメソッドを呼び出す 4 ローカル変数tmpにself(Array).dupを代入 => self(Array)レシーバのコピーした値を返しているため、配列オブジェクトとなる。 5 ローカル変数resに空の配列オブジェクトを生成し代入。例 values = [] # 空の配列を作成 6 resオブジェクトにpushメソッドを呼び出す。配列の最後に要素を追加する aryオブジェクトにbubblingメソッドを呼び出す。そしてaryオブジェクトの配列が空になるまでbubblingメソッドを繰り返し処理する。 emptyメソッド 文字列が空文字列ならtrue 空でなければfalseを返す untilメソッド 条件式がfalseの場合、繰り返し処理をする。 7 bubble_sortメソッドの戻り値にresオブジェクトを指定する。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/16 08:50
2015/10/16 11:48