본문 바로가기
공부/알고리즘

병합정렬 복습

by 맑은청이 2020. 5. 29.
728x90
반응형

저번 시간에서는 O(NlogN) 인 퀵정렬에 대해 배웠습니다. 하지만 퀵정렬은 정렬이 거꾸로 되어 있는 경우에 O(N^2)의 시간복잡도로 효율이 굉장히 안 좋아지는데요. 그에 반해 병합정렬은 O(NlogN) 의 시간복잡도를 보장해줍니다. 평균이 퀵정렬보다 빠르진 않지만 보장해준다는 면에서 굉장히 좋은 정렬 알고리즘임을 알 수 있습니다. 

 

병합정렬도 퀵정렬과 같이 나누고 해결하는 '분할 정복(divide and conquer) 알고리즘' 을 사용하는데요. 여기서 병합정렬이 시간복잡도를 보장해주는 이유에 대해서 나옵니다. 병합정렬은 무조건 두개로 나눠줍니다. 그리고 합치면서 정렬을 수행합니다. 합칠때 계산 횟수가 n 번이기 때문에 병합정렬은 O(nlog n) 의 시간복잡도를 보장할 수 있는 것 입니다.  

 

i 번째 와 j 번째 비교해주고 밑에 있는 배열에 넣어줍니다. 이건 배열이 이미 정렬되어 있기 때문에 사용이 가능합니다.

함수 안에 넣을 배열을 만들어 주면 메모리 낭비가 너무 심하기 때문에 전역 변수로 배열을 선언해서 사용해 줍니다. 

코드에 좀 더 자세히 구현이 되어 있습니다.  

728x90
반응형

'공부 > 알고리즘' 카테고리의 다른 글

힙정렬  (0) 2020.06.01
C++ Sort() 사용  (0) 2020.05.30
퀵정렬 복습  (0) 2020.05.28
삽입정렬 복습(Insertion Sort)  (0) 2020.05.27
버블 정렬 복습(Bubble Sort)  (0) 2020.05.27