問題2を実施しました。 1. #!/usr/koeki/bin/ruby # -*- coding: utf-8 -*- def bubblesort(data) n = data.length if data.length <= 1 return data end for i in 0..(n-1) for j in 1..(n-i-1) if data[j-1] > data[j] data[j-1],data[j] = data[j],data[j-1] end end end return data end def ketsugo(array) printf("[%s]\n", array.join(",")) end array = Array.new while true print"好きな数字を入力(終了はq)" datum = gets.chomp! if datum == "q" break end array.push(datum.to_i) end print"もとの順番\n" ketsugo(array) print"並べ替え後\n" ketsugo(bubblesort(array)) 2. ./bubble.rb [~/program] 好きな数字を入力(終了はq)1 好きな数字を入力(終了はq)6 好きな数字を入力(終了はq)7 好きな数字を入力(終了はq)4 好きな数字を入力(終了はq)9 好きな数字を入力(終了はq)12 好きな数字を入力(終了はq)3 好きな数字を入力(終了はq)q もとの順番 [1,6,7,4,9,12,3] 並べ替え後 [1,3,4,6,7,9,12] 3. 4行目は、def文で23行目の配列を受け取ります。 5行目は、nに配列の長さ(要素の数という認識です)を代入しています。これにより配列の一番最後の数字(要素)を基準にソートすることになると思います。 6,7行目は、データの数が1つだったらそのまま返します。 9行目は、要素の数だけ処理が繰り返されるようなif文を書きます。実行結果に基づいていうと、0~6(7-1)、配列の要素は0から数えるので計7回の処理が行われます。その処理の内容が10行目からのif文になるという認識です。 10行目には最大1~6が入りますが、これは処理が繰り返されていくうちにiの値が大きくなっていくので減っていきます。 11~13行目は、例えばjに1が代入された場合には、配列の0番目と1番目を比べて0番目のほうが大きければ入れ替える、jに2が代入された場合は、1番目と2番目を比べて1番目が大きければ入れ替える、というふうに繰り返されていきます。はじめの処理が終わった時点で配列の中で一番大きい値が右端(配列の6番目)に寄ります。そして2回目からはjに1~5が代入され繰り返されていきます。 16行目すべての処理が終わったらdataを返します。 19~21行目では、配列に","をつけて返します。 23行目で、配列arrayを作成。array = [] ではなく array = Array.new にしてみました。 24~36行目は講義内で扱ったクイックソートのプログラムと同じです。 4. バブルソートの仕組み自体は理解するのが簡単でしたが、それをプログラムで実際に作るとなると非常に苦労しました。今回始めてインターネットの記事を参考にプログラムを作成しましたが、そのプログラムの仕組み、やっていることはなんとなく理解しているつもりです。が、説明に不足している部分があるかもしれません。言葉で説明するのがすごく難しかったです。 https://zenn.dev/furum/articles/b78aff57471134 こちらのページを参考にしました。 添付: ruby2-5.rb