CS/알고리즘

[알고리즘] 9. 정렬 알고리즘 (3)

JIN-JJS 2025. 3. 26. 19:27

1. 힙 정렬 (Heap Sort)

1) 힙 정렬 개요

• 힙 자료구조를 이용한 정렬 알고리즘.

• 힙은 최댓값 또는 최솟값을 쉽게 추출할 수 있는 완전 이진 트리.

• 정렬할 데이터를 힙에 삽입한 후, 루트 노드를 반복적으로 삭제하여 정렬된 데이터를 얻는 방식.

• 힙의 노드는 유일한 키 값을 가짐.


• 힙의 종류:

- 최대 힙: 모든 노드의 키 값이 자식보다 크거나 같음. 루트 노드는 최댓값을 가짐.

- 최소 힙: 모든 노드의 키 값이 자식보다 작거나 같음. 루트 노드는 최솟값을 가짐.

 

• 오름차순 정렬은 최소 힙, 내림차순 정렬은 최대 힙을 사용.

 

2) 힙의 연산

삽입 연산

• 새로운 노드를 힙의 마지막에 삽입.

• 부모 노드와 비교하여 힙의 성질을 만족하도록 교환.

 

삭제 연산

• 루트 노드를 삭제한 후 마지막 노드를 루트로 이동.

• 자식 노드와 비교하여 힙의 성질을 유지하도록 재구성.

 

3) 최대 힙의 삽입 연산 예시

• 데이터 8 삽입:

- 8이 부모(4)보다 크므로 교환.

- 8이 부모(7)보다 크므로 교환.

- 부모(9)보다 작으므로 종료.

 

4) 힙에서의 부모와 자식 관계

• 왼쪽 자식 인덱스 = (부모 인덱스) * 2

• 오른쪽 자식 인덱스 = (부모 인덱스) * 2 + 1

• 부모 인덱스 = (자식 인덱스) / 2

 

5) 최대 힙의 삭제 연산 예시

• 루트(최댓값) 삭제 후 마지막 노드를 루트로 이동.

• 루트와 자식 노드 중 큰 값과 교환을 반복하여 힙 성질 유지.

 

6) 힙 정렬의 시간 복잡도

• 힙의 높이: log n

• 삽입 또는 삭제 연산의 시간: O(log n)

• 전체 정렬: O(n log n)

• 효율적인 정렬 알고리즘 중 하나.

 

 

 

2. 기수 정렬 (Radix Sort)

1) 기수 정렬 개요

• 데이터의 자릿수를 기준으로 정렬하는 방법.

• 최하위 자릿수부터 최상위 자릿수까지 차례로 정렬.

• 데이터의 상대적 순서를 유지하는 안정적 정렬.

 

2) 효율성

• 자릿수가 m이면 m번 버킷 분배 과정 반복.

• 비교 연산 없이 정렬 가능.

• 시간 복잡도: O(dn) (d: 자릿수, 일반적으로 d < 10).

• 정수 정렬에 효과적이나, 실수나 문자열 정렬은 불가능.

 

 

 

3. 계수 정렬 (Counting Sort)

1) 계수 정렬 개요

• 데이터의 등장 횟수를 세어 정렬하는 방법.

• 데이터의 출현 빈도를 기준으로 정렬.

• 비교 연산 없이 정렬 가능.

 

2) 계수 정렬 과정

• 카운트 배열 C를 생성하여 각 숫자의 등장 횟수를 저장.

• C 배열을 누적하여 데이터의 위치를 결정.

• 정렬된 결과를 새로운 배열 B에 저장.

 

3) 계수 정렬의 예시

• 배열 A의 원소들을 C 배열에 빈도수로 기록.

• 누적 합을 계산하여 C' 배열 생성.

• 뒤에서부터 A 배열의 원소를 읽어 C' 값을 참조해 B 배열에 저장.

• 저장할 때마다 C' 값을 감소시켜 위치 조정.

 

4) 계수 정렬의 효율성

• 동일한 키 값을 가지는 데이터 정렬에 효과적.

• 시간 복잡도: O(n).

• 공간 복잡도: O(n + k) (k: 데이터 범위 크기).

• 추가적인 배열이 필요하므로 공간 효율성이 낮을 수 있음.


이 내용은 휴넷사회복지평생교육원의 알고리즘 강의를 듣고 정리한 것입니다.