連結ソート



1.概念

  • 再帰的用法を用いたソートアルゴリズム.
  • リストを半分に切り、2つのサイズに近い部分リストに分けます.
  • は、集計ソートによって各部分リストを再帰的にソートする
  • である.
  • は、2つの部分リストを1つの並べ替えリスト
  • に結合する.

    2.実施


    結合
    def merge(left, right):
        merged = list()
        left_point, right_point = 0, 0
        
        # case1 - left/right 둘다 있을때
        while len(left) > left_point and len(right) > right_point:
            if left[left_point] > right[right_point]:
                merged.append(right[right_point])
                right_point += 1
            else:
                merged.append(left[left_point])
                left_point += 1
    
        # case2 - left 데이터가 없을 때
        while len(left) > left_point:
            merged.append(left[left_point])
            left_point += 1
            
        # case3 - right 데이터가 없을 때
        while len(right) > right_point:
            merged.append(right[right_point])
            right_point += 1
        
        return merged
    データ配信
    def mergesplit(data):
        if len(data) <= 1:
            return data
        medium = int(len(data) / 2)
        left = mergesplit(data[:medium])
        right = mergesplit(data[medium:])
        return merge(left, right)