問題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