quick_sort.rb
Heads up: This description was created by AI and might not be 100% accurate.
このRubyスクリプトは、クイックソート(マージソート)アルゴリズムを用いて配列をソートするものです。
プログラムの特徴:
- クイックソートのアルゴリズム: このスクリプトは、クイックソートの基本的な実装です。このアルゴリズムは「分割統治法」と呼ばれる戦略を使用します。
- 再帰的な実装: クイックソートは、配列を再帰的に分割し、各部分配列をソートすることで、元の配列全体をソートします。
- ピボットの選択: 各部分配列の中心となる要素(ピボット)を選択します。ここでは、配列の最初の要素をピボットとして選択しています。
- 分割: 配列を、ピボットよりも小さい要素の要素を左側の部分配列に、ピボットよりも大きい要素の要素を右側の部分配列に分割します。
- 再帰的なソート: 左側の部分配列と右側の部分配列に対して、再帰的にクイックソートを適用します。
- 連結: ソートされた左側の部分配列、ピボット、ソートされた右側の部分配列を連結することで、ソートされた配列全体を作成します。
アルゴリズム:
- ベースケース: 配列のサイズが1以下の場合は、既にソートされていると見なされ、そのまま返します。
- ピボットの選択: 配列の最初の要素をピボットとして選択します。
- 分割: 配列の各要素を、ピボットと比較し、ピボットよりも小さい要素の要素を左側の部分配列に、ピボットよりも大きい要素の要素を右側の部分配列にそれぞれ移動させます。
- 再帰的なソート: 左側の部分配列と右側の部分配列に対して、クイックソートを再帰的に適用します。
- 連結: ソートされた左側の部分配列、ピボット、ソートされた右側の部分配列を連結することで、ソートされた配列全体を作成します。
動作:
上記のコードは、与えられた配列をクイックソートアルゴリズムを用いてソートします。まず、配列の最初の要素をピボットとして選択し、配列をピボットよりも小さい要素と大きい要素に分割します。次に、分割された部分配列に対して再帰的にクイックソートを適用します。最後に、ソートされた部分配列を連結することで、ソートされた配列全体を作成します。このプロセスは、配列が完全にソートされるまで続行されます。
Ruby code snippet
# frozen_string_literal: true
#=> nil
def quick_sort(data)
return data if data.size <= 1
pivot = data.shift
left = []
right = []
data.each do |element|
pivot > element ? (left << element) : (right << element)
end
quick_sort(left) + [pivot] + quick_sort(right)
end
#=> :quick_sort
data = [5, 3, 4, 0, 2, 9, 6, 8, 7, 1]
#=> [5, 3, 4, 0, 2, 9, 6, 8, 7, 1]
p quick_sort(data)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Executed with Ruby 3.4.9.