# merge.py
def mSort(ns, asc=True):
# 원소들을 쪼개다가, 개수가 2보다 작아지면 return 한다 -> 원소가 하나씩 있을 경우
if len(ns) < 2:
return ns
# 쪼개지는 기준이 절반으로 쪼개니까, 절반에 해당하는 Index를 설정해주자
midIdx = len(ns) // 2 # 2로 나눈 몫이 절반에 해당하는 index다.
# 쪼개진 양쪽의 데이터에 대해서 다시 나누는 과정 재귀적으로 반복
leftNums = mSort(ns[:midIdx],asc=asc)
rightNums = mSort(ns[midIdx:],asc=asc)
print(leftNums)
print(rightNums)
print(ns)
# 병합하는 단계
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:]
print(f'merge Nums : {mergeNums}')
return mergeNums
Python
복사
import random
import merge
nums = random.sample(range(1,21),10)
print(f'not sorted nums :{nums}')
result = merge.mSort(nums)
print(f' sorted nums by asc : {result}')
result2 = merge.mSort(nums,False)
print(f' sorted nums by desc : {result2}')
Python
복사