반응형
정렬 알고리즘 종류 및 비교
1. 비교 기반 정렬
- 버블 정렬 (Bubble Sort)
- 선택 정렬 (Selection Sort)
- 삽입 정렬 (Insertion Sort)
- 병합 정렬 (Merge Sort)
- 퀵 정렬 (Quick Sort)
- 힙 정렬 (Heap Sort)
2. 비교하지 않는 정렬
- 계수 정렬 (Counting Sort)
- 기수 정렬 (Radix Sort)
- 버킷 정렬 (Bucket Sort)
알고리즘 | 최선 | 평균 | 최악 | 추가 메모리 | 안정성 |
버블 정렬 | O(N) | O(N²) | O(N²) | O(1) | 안정 |
선택 정렬 | O(N²) | O(N²) | O(N²) | O(1) | 불안정 |
삽입 정렬 | O(N) | O(N²) | O(N²) | O(1) | 안정 |
병합 정렬 | O(N log N) | O(N log N) | O(N log N) | O(N) | 안정 |
퀵 정렬 | O(N log N) | O(N log N) | O(N²) | O(log N) | 불안정 |
힙 정렬 | O(N log N) | O(N log N) | O(N log N) | O(1) | 불안정 |
계수 정렬 | O(N + K) | O(N + K) | O(N + K) | O(K) | 안정 |
기수 정렬 | O(N × d) | O(N × d) | O(N × d) | O(N + K) | 안정 |
버킷 정렬 | O(N + K) | O(N + K) | O(N²) | O(N + K) | 안정 |
1. 비교 기반 정렬 (Comparison-Based Sorting)
1.1 버블 정렬 (Bubble Sort)
- 작동 방식: 인접한 두 데이터를 비교하여 큰 값을 뒤로 보내는 방식.
- 시간 복잡도:
- 최악/평균: O(N²)
- 최선: O(N) (이미 정렬된 경우)
- 특징: 단순하지만 느림.
- 장점: 구현이 간단함.
- 단점: 비효율적이며 대규모 데이터에 적합하지 않음.
1.2 선택 정렬 (Selection Sort)
- 작동 방식: 배열에서 가장 작은 데이터를 선택해 앞쪽에 정렬하는 방식.
- 시간 복잡도:
- 모든 경우 O(N²)
- 특징: 단순하며 메모리 추가 사용이 없음.
- 장점: 데이터 이동 횟수가 적음.
- 단점: 대규모 데이터에 비효율적.
출처: https://miro.medium.com/v2/resize:fit:1400/1*5WXRN62ddiM_Gcf4GDdCZg.gif
1.3 삽입 정렬 (Insertion Sort)
- 작동 방식: 데이터가 삽입될 위치를 찾아 정렬된 배열에 삽입.
- 시간 복잡도:
- 최악/평균: O(N²)
- 최선: O(N) (이미 정렬된 경우)
- 특징: 정렬된 데이터에 적합.
- 장점: 적은 데이터에서 효율적.
- 단점: 대규모 데이터에 비효율적.
1.4 병합 정렬 (Merge Sort)
- 작동 방식: 배열을 반으로 나눈 뒤, 각각을 정렬하고 병합.
- 시간 복잡도: 모든 경우 O(N log N)
- 특징: 안정 정렬 (Stable Sort).
- 장점: 성능이 안정적이며 대규모 데이터 처리에 적합.
- 단점: 추가 메모리 사용이 큼(O(N)).
1.5 퀵 정렬 (Quick Sort)
- 작동 방식: 피벗을 기준으로 작은 값과 큰 값을 분리한 뒤 재귀적으로 정렬.
- 시간 복잡도:
- 평균: O(N log N)
- 최악: O(N²) (피벗이 잘못 선택된 경우)
- 특징: 비균형 분할 방지를 위한 랜덤 피벗 선택 가능.
- 장점: 추가 메모리 없이 빠르게 작동.
- 단점: 최악의 경우 성능 저하.
1.6 힙 정렬 (Heap Sort)
- 작동 방식: 데이터를 힙 구조로 정렬.
- 시간 복잡도: 모든 경우 O(N log N)
- 특징: 비교 기반 정렬.
- 장점: 추가 메모리 사용이 적음.
- 단점: 구현이 비교적 복잡하며 안정 정렬이 아님.
2. 비교하지 않는 정렬 (Non-Comparison Sorting)
2.1 계수 정렬 (Counting Sort)
- 작동 방식: 각 데이터의 개수를 세어 정렬.
- 시간 복잡도: O(N + K) (K는 최대값의 범위)
- 특징: 데이터의 크기 범위가 좁을 때 효율적.
- 장점: 매우 빠름.
- 단점: 데이터의 범위가 크면 비효율적.
2.2 기수 정렬 (Radix Sort)
- 작동 방식: 데이터를 자릿수 기준으로 정렬.
- 시간 복잡도: O(d × (N + K)) (d는 자릿수)
- 특징: 숫자 또는 문자열 정렬에 적합.
- 장점: 범위가 큰 데이터도 처리 가능.
- 단점: 안정적이지만 추가 메모리 사용이 큼.
2.3 버킷 정렬 (Bucket Sort)
- 작동 방식: 데이터를 여러 버킷으로 나누고 각 버킷을 정렬 후 병합.
- 시간 복잡도: 평균: O(N + K), 최악: O(N²)
- 특징: 균등하게 분포된 데이터에 적합.
- 장점: 빠르게 정렬 가능.
- 단점: 균등 분포가 아닌 경우 비효율적.
정렬 알고리즘 선택 기준
- 데이터 크기:
- 작은 데이터: 삽입 정렬, 선택 정렬.
- 큰 데이터: 퀵 정렬, 병합 정렬, 힙 정렬.
- 메모리 사용:
- 제한된 메모리: 퀵 정렬, 힙 정렬.
- 추가 메모리 가능: 병합 정렬, 계수 정렬.
- 데이터의 분포:
- 균등 분포: 버킷 정렬.
- 특정 범위: 계수 정렬.
- 데이터의 안정성 요구:
- 안정 정렬 필요: 병합 정렬, 계수 정렬.
- 안정성 불필요: 퀵 정렬, 힙 정렬.
시각 자료 출처: wikipedia
반응형
'Computer Science > 자료구조 & 알고리즘' 카테고리의 다른 글
[자료구조 & 알고리즘] 그래프 + BFS (0) | 2024.12.22 |
---|---|
[자료구조 & 알고리즘] 그래프 + DFS (3) | 2024.12.20 |
[자료구조 & 알고리즘] 탐색 알고리즘 총 정리 (feat. 이진탐색, DFS, BFS) (2) | 2024.12.17 |
[자료구조 & 알고리즘] 자료구조 개념 총정리 (향후 내용추가) (1) | 2024.12.16 |
[알고리즘] 공부 목표 & 학습자료 (0) | 2024.12.01 |