컴퓨터 Info/Python - 자료구조

Python - 병합정렬

붕짱이 2022. 5. 6.

병합정렬

 병합정렬은 저장된 데이터를 각각 끝까지 쪼갠 후 쪼갠 상태에서 병합하면서 정렬하는 방식이다.

 

예제
def mSort(ns, asc=True):
    if len(ns) < 2:
        return ns

    midIdx = len(ns) // 2
    leftNums = mSort(ns[0:midIdx], asc=asc)
    rightNums = mSort(ns[midIdx:len(ns)], asc=asc)

    mergeNums = []

    leftIdx = 0
    rightIdx = 0

    while leftIdx < len(leftNums) and rightIdx < len(rightNums):

        if asc:
            if leftNums[leftIdx] < rightNums[rightIdx]:
                mergeNums.append(leftNums[leftIdx])
                leftIdx += 1

            else:
                mergeNums.append(rightNums[rightIdx])
                rightIdx += 1
        else:
            if leftNums[leftIdx] > rightNums[rightIdx]:
                mergeNums.append(leftNums[leftIdx])
                leftIdx += 1

            else:
                mergeNums.append(rightNums[rightIdx])
                rightIdx += 1

    mergeNums = mergeNums + leftNums[leftIdx:]
    mergeNums = mergeNums + rightNums[rightIdx:]

    return mergeNums

import random as rd

rNums = rd.sample(range(1, 101), 10)
print(rNums)
print(mSort(rNums))
print(mSort(rNums, asc=False))
내용

재귀함수를 이용하여 구현한다.

 데이터의 길이가 1이 될때까지 나누고 각각 나눈 데이터를 비교하여 오름차순, 내림차순에 맞게 새 리스트에 정렬된 값을 넣어주고 리턴한다.

재귀함수로 반복해서 분할된 데이터들은 리턴하면서 정렬하여 마지막엔 전체 데이터가 정렬된 리스트를 만든다

 

결과
[6, 37, 23, 18, 71, 1, 84, 38, 76, 41]
[1, 6, 18, 23, 37, 38, 41, 71, 76, 84]
[84, 76, 71, 41, 38, 37, 23, 18, 6, 1]

'컴퓨터 Info > Python - 자료구조' 카테고리의 다른 글

Python - 퀵 정렬  (0) 2022.05.09
Python - 선택정렬  (0) 2022.05.04
Python - 삽입정렬  (0) 2022.05.04
Python - 버블정렬  (0) 2022.05.03
Python - 순위(Rank)  (0) 2022.05.03

댓글