import random
def mergeSort(p, r, arr):
if p < r:
q = int((p + r) / 2)
mergeSort(p, q, arr)
mergeSort(q + 1, r, arr)
merge(p, q + 1, r, arr)
def merge(p, q, r, arr):
temp_p, temp_q = p, q
merged_list = []
while temp_p < q or temp_q <= r:
if temp_p == q:
merged_list.append(arr[temp_q])
temp_q += 1
continue
elif temp_q > r:
merged_list.append(arr[temp_p])
temp_p += 1
continue
elif arr[temp_p] < arr[temp_q]:
merged_list.append(arr[temp_p])
temp_p += 1
continue
else:
merged_list.append(arr[temp_q])
temp_q += 1
continue
for i in merged_list:
arr[p] = i
p += 1
#print(p, q, r, arr, merged_list)
max_size = 10
M = [random.randint(0, 100) for _ in range(max_size)]
print(M)
mergeSort(0, max_size - 1, M)
print(M)
일단 개념을 들어보고 나름 생각나는대로 구현한 코드
def merge(A, p:int, q:int, r:int):
i = p; j = q+1; t = 0
tmp = [0 for i in range(len(A))]
while i <= q and j <= r:
if A[i] <= A[j]:
tmp[t] = A[i]; t += 1; i += 1
else:
tmp[t] = A[j]; t += 1; j += 1
while i <= q:
tmp[t] = A[i]; t += 1; i += 1
while j <= r:
tmp[t] = A[j]; t += 1; j += 1
i = p; t = 0
while i <= r:
A[i] = tmp[t]; t += 1; i += 1
이건 교수님이 올려주신 Merge 함수 코드.
나는 반복문에서 If를 4번 사용했는데, 어짜피 반복문에 if가 포함되므로 반복문 4번도 좋은 것 같다는 생각이 들었다...
'Algorithm' 카테고리의 다른 글
| Counting Sort_ 계수 정렬 알고리즘 (0) | 2025.10.09 |
|---|---|
| Radix sort(기수 정렬) (0) | 2025.10.09 |
| Shell Sort 알고리즘 (0) | 2025.10.09 |
| Heap Sort (2) | 2025.10.08 |
| Quick Sort 알고리즘 (0) | 2025.09.27 |