-
[알고리즘] 정렬 알고리즘② : 합병정렬, 힙정렬, 퀵정렬(정의/특징/복잡도)알고리즘 2023. 9. 13. 21:18반응형
병합/합병 정렬
- 시간복잡도 : O(n log n)
- 분할 정복 알고리즘의 하나
- 정렬되지 않은 리스트를 각각 하나의 원소만 포함하는 n개의 부분리스트로 분할한다. (한 원소만 든 리스트는 정렬된 것과 같으므로)
- 부분리스트가 하나만 남을 때까지 반복해서 병합하며 정렬된 부분리스트를 생성한다. 마지막 남은 부분리스트가 정렬된 리스트이다.
힙 정렬
- 시간복잡도 : O(n log n)
-최대 힙 트리나 최소 힙 트리를 구성해 정렬을 하는 방법으로서, 내림차순 정렬을 위해서는 최소 힙을 구성하고 오름차순 정렬을 위해서는 최대 힙을 구성하면 된다.
- n개의 노드에 대한 완전 이진 트리를 구성한다. 이때 루트 노드부터 부모노드, 왼쪽 자식노드, 오른쪽 자식노드 순으로 구성한다.
- 최대 힙을 구성한다. 최대 힙이란 부모노드가 자식노드보다 큰 트리를 말하는데, 단말 노드를 자식노드로 가진 부모노드부터 구성하며 아래부터 루트까지 올라오며 순차적으로 만들어 갈 수 있다.
- 가장 큰 수(루트에 위치)를 가장 작은 수와 교환한다.
- 2와 3을 반복한다.
퀵정렬(분할정복)
- 시간복잡도 : O(n log n)
- 리스트 가운데서 하나의 원소를 고른다. 이렇게 고른 원소를 피벗이라고 한다.
- 피벗 앞에는 피벗보다 값이 작은 모든 원소들이 오고, 피벗 뒤에는 피벗보다 값이 큰 모든 원소들이 오도록 피벗을 기준으로 리스트를 둘로 나눈다. 이렇게 리스트를 둘로 나누는 것을 분할이라고 한다. 분할을 마친 뒤에 피벗은 더 이상 움직이지 않는다.
- 분할된 두 개의 작은 리스트에 대해 재귀(Recursion)적으로 이 과정을 반복한다. 재귀는 리스트의 크기가 0이나 1이 될 때까지 반복된다.
재귀 호출이 한번 진행될 때마다 최소한 하나의 원소는 최종적으로 위치가 정해지므로, 이 알고리즘은 반드시 끝난다는 것을 보장할 수 있다.
출처: 위키백과
반응형'알고리즘' 카테고리의 다른 글
[알고리즘] 자릿수의 합 (0) 2023.09.17 [알고리즘] 숫자합 : 자연수 11부터 n까지의 합 (0) 2023.09.17 [알고리즘] 피보나치 수열 (0) 2023.09.17 [알고리즘] 정렬 알고리즘① : 선택정렬과 삽입정렬, 버블정렬(정의/특징/복잡도) (0) 2023.09.10 [알고리즘] 선형탐색과 이진탐색 (0) 2023.09.07