マージソート
マージソートは、ソートしたいデータが入ったリストを2つに分割することを繰り返し、すべてがバラバラになった状態から、これらのリストを統合(マージ)する方法です。
この統合する際に、そのリスト内で値が小さい順に並ぶように実装することで、全体が1つのリストになったときには全ての値がソート済みになっています。
ソースコード
マージソートを実装すると下記のようになります。
[Google Colaboratory]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| lst = [13, 7, 9, 11, 5, 7, 2, 4, 15, 6]
def merge_sort(lst): if len(lst) <= 1: return lst
mid = len(lst) // 2 left = merge_sort(lst[:mid]) right = merge_sort(lst[mid:]) return merge(left, right)
def merge(left, right): result = [] i, j = 0, 0
while (i < len(left)) and (j < len(right)): if left[i] <= right[j]: result.append(left[i]) i += 1 else: result.append(right[i]) j += 1 if i < len(left): result.extend(left[i:]) if j < len(right): result.extend(right[j:]) return result
print('解:', merge_sort(lst))
|
[実行結果]
解: [2, 5, 6, 6, 7, 6, 9, 9, 13, 15]
マージソートの特徴
マージソートの特徴として、メモリに入りきらないような大容量のデータにも使えることが挙げられます。
分割した領域のそれぞれでソートできるため、複数のディスク装置にあるデータをそれぞれでソートしておき、それを結合しながらソート済みのデータを作成することも可能です。