C++/자료구조
[C++] 정렬 #2 삽입 정렬 & 힙 정렬 (Insertion Sort & Heap Sort)
노랑꼬리
2023. 6. 30. 10:34
목차
1. 삽입 정렬 (Insertion Sort)
- 배열의 요소를 앞에서 부터 이미 정렬된 배열과 비교하여 자신의 위치를 찾아 정렬
- 1회전 마다 하나씩 요소들을 정렬해나간다.
- 배열이 길수록 효율이 떨어진다. (비교할 정렬이 길어지므로)
- 본인 위치를 찾아 삽입하여 정렬하므로 삽입 정렬이라 한다.
- 시간 복잡도가 버블 정렬, 선택 정렬과 같은 O(n²) 이지만 둘 보다 빠르다.
가. 구현하기
2. 힙 정렬 (Heap Sort)
- 완전 이진 트리로 구성되어 최대 힙 트리나 최소 힙 트리를 구성해 정렬.
- 정렬된 최대(최소) 힙에서 루트 노드를 꺼내어 배열에 저장한다.
- 루트 노드가 삭제되면 힙의 재구성을 거쳐 제외된 값을 제외한 가장 큰(작은) 값이 루트 노드가 된다.
- 최대, 최소값 탐색에 최적화 되어있다.
- 시간복잡도가 O(nlog₂n) 으로서 빠르다.
※ 힙 트리와 우선 순위 큐
https://yellowtail2357.tistory.com/66
가. 구현하기
※ 참조
위키 백과 삽입 정렬
https://ko.wikipedia.org/wiki/%EC%82%BD%EC%9E%85_%EC%A0%95%EB%A0%AC
위키 백과 힙 정렬
https://ko.wikipedia.org/wiki/%ED%9E%99_%EC%A0%95%EB%A0%AC
동빈나 유튜브 힙 정렬
https://www.youtube.com/watch?v=iyl9bfp_8ag&t=1038s