Search

병합 알고리즘 연습문제

# 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
복사