실행 결과
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
알아 보기
병합 정렬 함수의 첫 부분이 바로 종료 조건입니다.
n = len(a)
if n <= 1:
return a
입력으로 주어진 리스트 a의 크기가 1 이하이면, 즉 자료가 한 개뿐이거나 아예 비어 있다면 정렬할 필요가 없으므로 입력 리스트를 그대로 돌려주면서 재귀 호출을 끝냅니다.
다음은 전체 리스트를 절반으로 나눠 각각 재귀 호출로 병합 정렬하는 부분입니다.
mid = n // 2 # 두 그룹으로 나누기 위한 중간 값
g1 = merge_sort(a[:mid]) # 재귀 호출로 첫 번째 그룹을 정렬
g2 = merge_sort(a[mid:]) # 재귀 호출로 두 번째 그룹을 정렬
리스트의 자료 개수가 홀수일 때는 어떻게 절반으로 나눌까요?
n // 2는 리스트의 길이 n을 2로 나눈 몫이므로 n이 5와 같은 홀수라면 n // 2는 2가 됩니다. 즉, 자료가 두 개인 그룹과 세 개인 그룹으로 나눕니다. 참고로 a[:mid]는 리스트 a의 0번 위치부터 mid 위치 직전까지의 자료를 복사해서 새 리스트를 만드는 문장입니다. 또한, a[mid:]는 리스트 a의 mid 위치부터 끝까지의 자료를 복사해서 새 리스트를 만드는 문장입니다.