選択ソートについて、以下のようなコードを書いてみました。
ruby
1def selection_sort(numbers) 2 3 (numbers.length-1).times do |i| 4 min = i 5 k = i + 1 6 7 while k < (numbers.length) 8 if numbers[k] < numbers[min] 9 min = k 10 end 11 k = k + 1 12 end 13 14 15 numbers[min] , numbers[i] = numbers[i] , numbers[min] 16 i = i + 1 17 end 18 p numbers 19end 20 21selection_sort([10,2,12,7,16,8,13,1])
出力自体は問題ないのですが、いくつか疑問が残っていますので、質問させていただきたいと思います。
変数
i
、min
、k
について
配列 [10,2,12,7,16,8,13,1]に対して、
ソート前の状態ではi
が10、k
が2、min
は1が当てはまり、繰り返されるたびに、配列の先頭が+1されていくと言う認識で正しいでしょうか?
上記が正しいと仮定して、min = i
とすることでi
と比較した最小値が取得できるのは何故でしょうか?
while文について
while k < (numbers.length) if numbers[k] < numbers[min] min = k end k = k + 1 end
の部分も、本当はtimesメソッドを使ってみたかったのですが、うまくいきませんでした。
どのようにするのが適切なのでしょうか。
ご教示のほど、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/06 12:06