Skip to content

Instantly share code, notes, and snippets.

@Taishikun0721
Last active November 10, 2020 08:15
Show Gist options
  • Save Taishikun0721/3bdf485e08d1071622a35f49b304858e to your computer and use it in GitHub Desktop.
Save Taishikun0721/3bdf485e08d1071622a35f49b304858e to your computer and use it in GitHub Desktop.
ソートプログラム

ソートプログラム

並び替え方法

  1. checkを呼ぶと、まず配列の中身が右の数字より大きいかチェックします。
  2. 右の数字が大きい場合はそのまま続行、小さい場合は並び替えメソッドb_sortが動きます。
  3. b_sortメソッドにはチェックした配列が渡されて、その中で1つ右の数字以上のものは数字を入れ替え、それ以外のものはそのままです。
  4. index番号が1からスタートしているので、配列のサイズと同じになるとすべての数字に対して処理が終わっている事となります。 その為、再度checkメソッドを呼んで配列の並びをチェックします。
  5. 再度checkメソッドで並びをチェックします。(この後は複数回1~5の繰り返しです。)
  6. 最後にcheckメソッドのindexが配列のサイズと一緒になるのはすべてが昇順に並び替えられている時だけだから、そのタイミングでretrunを使用して処理を終わらせます。

やってみた感想

今回はバブルソートの考え方を落とし込んでやってみた。途中で頭がこんがらがってくるので、順に整理しながら実装した。結構難しかったし大変だった。

あくまでsortメソッド等の並び替えメソッドを使用しない体でやっているので、トレーニングにしかならないが 順を追って実装していくのは写経では身につかないのでいい勉強だった。生のRubyを書くのはこのようなメリットがあるしプログラミングやっている感があるので楽しい。

反省点

オブジェクト指向に沿って実装するほどの気力が残っていなかったので、そこは皆さんに意見をもらったり、時間がある時にリファクタリングしていこうと思う。

numbers = [10, 8, 3, 5, 2, 4, 11, 18, 20, 33]
def check(numbers)
numbers.each.with_index(1) do |num, index|
return numbers if index == numbers.size
b_sort(numbers) unless num <= numbers[index]
end
end
def b_sort(numbers)
numbers.each.with_index(1) do |num, index|
return check(numbers) if index == numbers.size
numbers[index -1], numbers[index] = numbers[index], numbers[index - 1] if num >= numbers[index]
end
end
p check(numbers)
class Sort
attr_accessor :numbers
def initialize(numbers)
@numbers = numbers
end
def check
numbers.each.with_index(1) do |num, index|
return numbers if index == numbers.size
b_sort unless num <= numbers[index]
end
end
def b_sort
numbers.each.with_index(1) do |num, index|
return check if index == numbers.size
numbers[index -1], numbers[index] = numbers[index], numbers[index - 1] if num >= numbers[index]
end
end
end
numbers = [10, 8, 3, 5, 2, 4, 11, 18, 20, 33]
sort = Sort.new(numbers)
p sort.check
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment