Thief of Wealth
Published 2019. 3. 19. 00:39
합병정렬 개발/알고리즘


쪼개고 쪼개고 쪼개서 더이상 쪼갤 수 없을 만큼 쪼개고,

그 조각들을 순서대로 대소를 비교하며 채워넣고 반환하는 것을 반복하는 

전형적인 분할정복 문제이다.

import sys
sys.stdin = open("input.txt","r")

#func lines start
def mergeSort(arr):

length = len(arr)
if( length == 1 ):
return arr
else:
arr1 = mergeSort(arr[:int(length/2)])
arr2 = mergeSort(arr[int(length/2):] )
arr3 = []
arr3_adder = arr3.append
arr1_cursor = 0
arr2_cursor = 0
#대소 비교하며 채워넣기
while (arr1_cursor < len(arr1)) and (arr2_cursor < len(arr2)):
if( arr1[arr1_cursor] <= arr2[arr2_cursor]):
arr3_adder( arr1[arr1_cursor] )
arr1_cursor = arr1_cursor + 1
else:
arr3_adder( arr2[arr2_cursor] )
arr2_cursor = arr2_cursor + 1

#남은거 뒤에 붙여주기
if(arr1_cursor < len(arr1)):
arr3.extend(arr1[arr1_cursor:])
else:
arr3.extend(arr2[arr2_cursor:])

return arr3
#func line end


#main
if __name__ == "__main__":

arr = list(map(int, input().split()))
print( mergeSort(arr) )





'개발 > 알고리즘' 카테고리의 다른 글

2309 일곱난쟁이  (0) 2019.03.22
1912 연속합  (0) 2019.03.22
python 속도 높이기 팁  (0) 2019.03.18
Codeforces Global Round 1 (A. Parity)  (0) 2019.02.08
4949 The Balance of the World  (0) 2019.01.24
profile on loading

Loading...