def merge(arr, start, mid, end):
temp = [None] * len(arr)
i = start
j = mid + 1
k = start
while i <= mid and j <= end:
if(arr[i] <= arr[j]):
temp[k] = arr[i]
i += 1
k += 1
else :
temp[k] = arr[j]
j += 1
k += 1
while i <= mid:
temp[k] = arr[i]
k += 1
i += 1
while j <= end:
temp[k] = arr[j]
k += 1
j += 1
for i in range(start, end + 1):
arr[i] = temp[i]
def mergeSort(arr, start, end):
if start < end:
mid = (start + end) // 2
mergeSort(arr, start, mid)
mergeSort(arr, mid + 1, end)
merge(arr, start, mid, end)
arr = [31, 53, 75, 42, 15, 64, 31] #정렬할 배열
print("[정렬되지 않은 배열]")
print(arr)
print()
start = 0
end = len(arr) - 1
mergeSort(arr, start, end)
print("[정렬 완료된 배열]")
print(arr)
[정렬되지 않은 배열]
[31, 53, 75, 42, 15, 64, 31]
[정렬 완료된 배열]
[15, 31, 31, 42, 53, 64, 75]
1. 배열을 반으로 나눈다. 재귀 때문에 계속 나뉜다.
2. 할 수 있는 끝까지 나눈다.
3. 전반부와 후반부의 첫 원소를 비교한 뒤 합친다.
4. 이걸 재귀하여 계속 반복하며 비교 및 병합 한다.
정렬 완료.
'공부 > 자료 구조 및 알고리즘' 카테고리의 다른 글
퀵정렬 (Quick Sort) - python (0) | 2022.10.25 |
---|---|
삽입정렬 (Insertion Sort) - python (0) | 2022.10.25 |
버블정렬 (Bubble Sort) - python (0) | 2022.10.25 |
선택정렬 (Selection Sort) - python (0) | 2022.10.24 |
자료의 정렬 - 합병 정렬(Merge sorting) (0) | 2019.08.04 |