더북(TheBook)

icon_result 실행 결과

 

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

icon_solution 알아 보기

 

병합 정렬 함수의 첫 부분이 바로 종료 조건입니다.

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:]는 리스트 amid 위치부터 끝까지의 자료를 복사해서 새 리스트를 만드는 문장입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.