0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

マージソート|大きい順のソーティング

Posted at

#マージソートをPythonで
###分割してまた結合(マージ)して
マージソートは、ソートする値が入ったリストを2つに分割することを繰り返し、バラバラにした後、今度は結合(マージ)するときに大きい順(小さい順もOK)に並べ替えていくソーティングアルゴリズムです。
merge.jpg

・ソースコードは以下の通りです

mergeSort.py
data = [6,13,12,65,76,22,43,87,14,9]

def merge_Sort(data):
    if len(data) <= 1:
        return data

    mid = len(data) // 2 # ど真ん中のインデックス取得
    # 再帰的に分類
    left = merge_Sort(data[:mid]) # 左側を分割
    right = merge_Sort(data[mid:]) # 右側を分割
    # 結合(マージ)
    return merge(left, right)

def merge(left, right):
    result = []
    ii, jj = 0, 0

    while ( ii < len(left)) and (jj < len(right)):
        if left[ii] >= right[jj]:
            result.append(left[ii])
            ii += 1
        else:
            result.append(right[jj])
            jj += 1

    # 残りを一気に追加する
    if ii < len(left):
        result.extend(left[ii:]) # 左側残りを追加
    if jj< len(right):
        result.extend(right[:jj]) # 右側残りを追加
    return result

print(merge_Sort(data))

# 結果
# [87, 76, 65, 43, 22, 13, 12, 6]

特徴として、メモリに入りきらないような大容量のデータがあったとして、分割した別の箇所でそれぞれソーティングしておいて、それから結合しながらデータを作成することも可能となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?