Algorithm
๋ณํฉ ์ ๋ ฌ (Merge Sort) ์ ๋ฆฌ
Yusang
2021. 7. 31. 09:17
๐ฉ๐ป ๋ณํฉ ์ ๋ ฌ (Merge Sort) ์ ๋ฆฌ with Python
๐ณ ๋ณํฉ ์ ๋ ฌ (Merge Sort)์ด๋?
- ์ฌ๊ท ์ฉ๋ฒ์ ํ์ฉํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
- ๋ฆฌ์คํธ๋ฅผ ์ ๋ฐ์ผ๋ก ์๋ผ ๋น์ทํ ํฌ๊ธฐ์ ๋ ๋ฆฌ์คํธ๋ก ๋๋๋๋ค.
- ๊ฐ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ณํฉ ์ ๋ ฌ์ ์ด์ฉํด ์ ๋ ฌํฉ๋๋ค.
- ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ๋ค์ ํ๋์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ก ๋ณํฉํฉ๋๋ค.
Merge Sort๋ Divide And Conquer์ ๋ํ์ ์ธ ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
๐ฅ ๋ณํฉ ์ ๋ ฌ ๊ตฌํ with Python
def mergeSort(data):
if len(data) <= 1:
return data
medium = len(data) // 2
left = mergeSort(data[:medium])
right = mergeSort(data[medium:])
return merge(left, right)
def merge(left, right):
merged = list()
leftPoint, rightPoint = 0, 0
while len(left) > leftPoint and len(right) > rightPoint:
if left[leftPoint] > right[rightPoint]:
merged.append(right[rightPoint])
rightPoint += 1
else:
merged.append(left[leftPoint])
leftPoint += 1
while len(left) > leftPoint:
merged.append(left[leftPoint])
leftPoint += 1
while len(right) > rightPoint:
merged.append(right[rightPoint])
rightPoint += 1
return merged
๐ช ์๊ฐ ๋ณต์ก๋ ๋ถ์
O(n) * O(log n) = O(n log n)