분할 정복 예제 - 2

문제 분석

  • N의 최대 범위가 500,000이므로 O(nlogn)의 시간 복잡도로 정렬을 수행해야 한다.

  • 제목은 버블 정렬이지만, 버블 정렬은 n^2의 시간 복잡도를 가지기 때문에 시간 초과가 발생한다.

  • 병합 정렬을 사용해서 두 그룹을 병합하는 과정에서 버블 정렬의 swap이 일어나는 과정을 알 수 있다.

img_2.png

손으로 풀어보기

병합 정렬은 동일하게 진행하고, 정렬 과정에서 index가 이동한 거리를 결과에 저장한다.

img_3.png

뒤에 있는 데이터가 앞으로 올 때만 이동한 거리 만큼 result에 더해준다.

슈도코드

코드 구현 - 파이썬

코드 구현 - 자바

Last updated