Problem Solving
Stable Sort &Inplace
JoonYong
2024. 1. 12. 00:52
반응형
Stable Sort (안정적인 정렬)
정의:
- Stable Sort는 동일한 값에 대한 상대적인 순서가 정렬 후에도 유지되는 정렬 알고리즘입니다.
예시:
- 예를 들어, 다음과 같은 리스트가 있습니다: [(2, 'a'), (1, 'b'), (2, 'c'), (1, 'd')]
- 안정적인 정렬 알고리즘을 사용하여 첫 번째 요소를 기준으로 오름차순 정렬하면 결과는 [(1, 'b'), (1, 'd'), (2, 'a'), (2, 'c')]가 됩니다.
- 여기서 중요한 점은 두 개의 (1, 'b')와 (1, 'd')는 원래 순서대로 유지되고, 두 개의 (2, 'a')와 (2, 'c')도 원래 순서대로 유지된다는 것입니다.
안정적인 정렬 알고리즘 예시:
- Bubble Sort
- Merge Sort
- Insertion Sort
- Timsort (Python의 내장 sort()와 sorted()에서 사용됨)
불안정한 정렬 알고리즘 예시:
- Quick Sort
- Heap Sort
- Selection Sort
Inplace 정렬
정의:
- Inplace 정렬 알고리즘은 추가적인 메모리를 많이 사용하지 않고, 입력 데이터의 일부만을 이용하여 데이터를 정렬하는 알고리즘입니다. 즉, 입력 배열 외에 추가적인 O(1) 또는 O(log n) 공간만 사용합니다.
예시:
- 배열 [3, 1, 4, 1, 5]를 정렬할 때, Inplace 알고리즘은 이 배열 자체를 변경하여 정렬합니다.
Inplace 정렬 알고리즘 예시:
- Quick Sort (일반적으로 Inplace)
- Heap Sort
- Insertion Sort
- Bubble Sort
비-Inplace 정렬 알고리즘 예시:
- Merge Sort (일반적으로 추가적인 배열 공간 사용)
- Counting Sort (추가적인 배열 사용)
두 개념을 종합한 정렬 알고리즘 분석:
Insertion Sort:
- Stable: 예, 같은 값의 원소들이 입력 순서를 유지합니다.
- Inplace: 예, 추가적인 메모리를 거의 사용하지 않습니다.
Merge Sort:
- Stable: 예, 같은 값의 원소들이 입력 순서를 유지합니다.
- Inplace: 아니요, 추가적인 메모리 배열을 사용합니다.
Quick Sort:
- Stable: 아니요, 같은 값의 원소들이 입력 순서를 유지하지 않을 수 있습니다.
- Inplace: 예, 추가적인 메모리를 거의 사용하지 않습니다.
Heap Sort:
- Stable: 아니요, 같은 값의 원소들이 입력 순서를 유지하지 않습니다.
- Inplace: 예, 추가적인 메모리를 거의 사용하지 않습니다.
이렇게 정렬 알고리즘을 선택할 때는 정렬의 안정성(stable)과 메모리 사용 여부(inplace)를 고려하여 적합한 알고리즘을 선택해야 합니다.
반응형