6. 비교 기반 정렬 알고리즘(Comparison-based Sorting)
반응형
값을 비교하는 것에 기반한 정렬 알고리즘을 비교정렬이라 한다.
(버블 정렬, 선택 정렬, 삽입 정렬, 힙 정렬, 합병 정렬, 퀵 정렬 등)
비교 정렬의 하한 구하기
n개의 원소를 비교정렬로 정렬할 경우, 하한Lower Bound을 유도해보자.
n개의 유일한 키로부터 존재할 수 있는 순서쌍은 n!개이다.
오름차순 정렬을 한다고 가정하면, 이 가운데 단 하나의 순서쌍만이 올바른 정렬 결과이다.
어떤 방법으로 정렬을 하더라도, n!개의 경우가 존재하므로 결정 트리의 높이는 최소 log(n!)이 된다.
그러므로, 어떤 비교정렬 알고리즘도 최소 log(n!) 시간을 소요한다.
log(n!)≤log(n2)n/2=n2log(n2) 이므로, 어떤 비교정렬 알고리즘이라도 O(nlogn)시간이 소요된다.
정렬의 안정성Stability
키-원소 항목들을 정렬할 때, 중요한 이슈는 동일키의 처리이다.
L=[(k0,e0),⋯(kn−1,en−1)]을 정렬해야할 리스트라 하자.
두 개의 항목 (ki,ei)와 (kj,ej)에 대해, ki=kj이며 i<j였을 때, 정렬 후에도 i<j라면 그 알고리즘을 안정적stable이라고 한다.
비교정렬 알고리즘 비교
시간 | 주요 전략 | 비고 | |
선택 정렬 | O(n2) | (무순) 우선순위 큐 | 제자리 |
삽입 정렬 | O(n2) | (순서) 우선순위 큐 | 제자리 |
힙 정렬 | O(nlogn) | (힙으로 구현된) 우선순위 큐 | 제자리 빠름 (대규모 입력에 적합) |
합병 정렬 | O(nlogn) | 분할 정복법 | 순차 데이터접근 빠름 (초대규모 입력에 적합) |
퀵 정렬 | O(nlogn)의 기대시간 (일반적인 경우 가장 빠름) |
분할 정복법 | 제자리, 무작위 접근 가장 빠름 (대규모 입력에 적합) |
반응형
'학부 수업 > 알고리즘' 카테고리의 다른 글
8. 이진 탐색 트리 (Binary Search Tree) (0) | 2020.10.13 |
---|---|
7. 사전 ADT (Dictionary ADT) (0) | 2020.10.08 |
5. 퀵 정렬(Quick Sort) (0) | 2020.09.29 |
4. 합병 정렬과 분할 정복법 (Merge Sort, Devide and Conquer) (0) | 2020.09.22 |
3. 힙 정렬 (Heap Sort) (0) | 2020.09.15 |
댓글
이 글 공유하기
다른 글
-
8. 이진 탐색 트리 (Binary Search Tree)
8. 이진 탐색 트리 (Binary Search Tree)
2020.10.13 -
7. 사전 ADT (Dictionary ADT)
7. 사전 ADT (Dictionary ADT)
2020.10.08 -
5. 퀵 정렬(Quick Sort)
5. 퀵 정렬(Quick Sort)
2020.09.29 -
4. 합병 정렬과 분할 정복법 (Merge Sort, Devide and Conquer)
4. 합병 정렬과 분할 정복법 (Merge Sort, Devide and Conquer)
2020.09.22
댓글을 사용할 수 없습니다.