안녕하세요 틴구입니다.
오늘은 병합정렬에 대해서 설명드리려고 해요~
병합정렬이란 : 합병 정렬(merge sort)은 하나의 배열을 두 개의 균등한 크기로 분할하고 각 분할된 배열을 정렬한 다음, 두 개의 정렬된 부분 배열을 합하여 전체가 정렬된 배열을 얻고자 하는 것이다.
3, 5, 2, 6, 4, 1, 7, 8
의 배열이 구성되어 있다고 하면
3, 5, 2, 6 | 4, 1, 7, 8
3, 5 | 2, 6 | 4, 1 | 7, 8
3 | 5 | 2 | 6 | 4 | 1 | 7 | 8
이렇게 나뉜다음 돌아가면서 정렬을 이루는 형식입니다
3, 5 | 2, 6 | 1, 4 | 7, 8
2, 3, 5, 6 | 1, 4, 7, 8
1, 2, 3, 4, 5, 6, 7, 8
이런 식으로 요
원리를 알았으니깐 코드구성을 알아봅시다!
우선 template를 이용해 만들 거기 때문에 class를 인라인으로 생성해줍니다
기본 틀은 퀵 정렬이랑 동일한데 추가되는 부분은 병합 정렬은 기본 배열에서 정렬하는 방식이 아닌
새로운 배열을 만든 다음 그 배열에서 정렬을 시키는 방법이기 때문에 T* m_CopyArray를 하나 추가해줍니다.
void push(const T& data) 함수
void push(T* Array, int Count) 함수
Sort함수
주석으로 코드 분석을 다 해두었으니 설명은 생략하도록 하겠습니다!
처음 위에서 적은 원리만 이해하고 코드를 보면 더 쉽게 이해할 수 있을 겁니다
'c++ > 자료구조' 카테고리의 다른 글
20210810 Dijkstra(다익스트라) 알고리즘 (0) | 2021.08.11 |
---|---|
20210810 Graph알고리즘 (0) | 2021.08.11 |
20210806 Heap정렬, Quick정렬 (0) | 2021.08.08 |
20210805 자가균형 이진트리 AVLTree (0) | 2021.08.06 |
20210804 이진 트리 순회, erase (0) | 2021.08.05 |
댓글