quick_sort.rb

Heads up: This description was created by AI and might not be 100% accurate.

このRubyスクリプトは、クイックソート(マージソート)アルゴリズムを用いて配列をソートするものです。

プログラムの特徴:

アルゴリズム:

  1. ベースケース: 配列のサイズが1以下の場合は、既にソートされていると見なされ、そのまま返します。
  2. ピボットの選択: 配列の最初の要素をピボットとして選択します。
  3. 分割: 配列の各要素を、ピボットと比較し、ピボットよりも小さい要素の要素を左側の部分配列に、ピボットよりも大きい要素の要素を右側の部分配列にそれぞれ移動させます。
  4. 再帰的なソート: 左側の部分配列と右側の部分配列に対して、クイックソートを再帰的に適用します。
  5. 連結: ソートされた左側の部分配列、ピボット、ソートされた右側の部分配列を連結することで、ソートされた配列全体を作成します。

動作:

上記のコードは、与えられた配列をクイックソートアルゴリズムを用いてソートします。まず、配列の最初の要素をピボットとして選択し、配列をピボットよりも小さい要素と大きい要素に分割します。次に、分割された部分配列に対して再帰的にクイックソートを適用します。最後に、ソートされた部分配列を連結することで、ソートされた配列全体を作成します。このプロセスは、配列が完全にソートされるまで続行されます。

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.