본문 바로가기

CS study/[core] 데이터 구조

10. Heapsort

Heapsort

전략

i. Heapify: N개의 정렬되지 않은 array를 max Heap 구조로 만들기

ii. maximum 키를 순차적으로 pop

 

내림차순 정렬을 위해서는 최대힙, 오름차순 정렬을 위해서는 최소 힙을 만들면 된다.

 

동작

image-20210709123234082

 

i) Heapify

Bottom-up method로 최대 힙을 만들자.

 

이 경우 마지막 Internal node 3-node heap에서 시작한다.

image-20210709124604814

 

image-20210709124750690

 

 

image-20210709124931497

 

image-20210709125314444

 

 

image-20210709125531889

 

이미 T가 루트인 3-node heap은 heap 구조를 만족하므로 패스

image-20210709125642334

 

image-20210709130132546

 

image-20210709130319026

 

image-20210709130421830

 

 

image-20210709130843767

 

image-20210709131041105

 

image-20210709131237196

 

image-20210709131419639

 

 

image-20210709132428725

 

image-20210709132610208

 

image-20210709132739339

 

ii. 순차적으로 maximum key를 지운다.

image-20210709160323355

 

image-20210709160536527image-20210709160629914image-20210709160812641

 

image-20210709161000464

 

image-20210709161412289

한 번에 하나씩 최대값을 제거합니다. null을 제거하는 대신 배열에 그대로 두십시오.

 

 

image-20210709161535158

 

image-20210709161756758

 

이런식으로 쭉쭉 하다보면

 

image-20210709161945353

이렇게 정렬이 된다.

 

// 실행 과정

Enter a word to sort: SORTEXAMPLE 

	Unsorted: S O R T E X A M P L E 
	
	N=11 k=5:	S	O	R	T	L	X	A	M	P	E	E 
	N=11 k=4:	S	O	R	T	L	X	A	M	P	E	E 
	N=11 k=3:	S	O	X	T	L	R	A	M	P	E	E 
	N=11 k=2:	S	T	X	P	L	R	A	M	O	E	E 
	N=11 k=1: X T S P L R A M O E E 
	
	Heap ordered: X T S P L R A M O E E				

	N=10 k=1:	T	P	S	O	L	R	A	M	E	E 
	N=9 k=1:	S	P	R	O	L	E	A	M	E 
	N=8 k=1:	R	P	E	O	L	E	A	M 
	N=7 k=1: 	P O E M L E A
	N=6 k=1:	O	M	E	A	L	E 
	N=5 k=1:	M	L	E	A	E 
	N=4 k=1:	L	E	E	A 
	N=3 k=1: 	E A E
	N=2 k=1:	E	A 
	N=1 k=1: 	A
	
	Sorted: A E E	L	M	O	P	R	S	T	X

 

 

// heapify

while (N > 1) {
  swap (a, 1, N--);
  sink (a, 1, N);
}

 

 

'CS study > [core] 데이터 구조' 카테고리의 다른 글

14. Graph Basics  (0) 2021.07.10
11. AVL tree  (0) 2021.07.10
9. Heap, Priority Queue  (0) 2021.07.09
8. Binary Search Tree  (0) 2021.07.08
7. Tree  (0) 2021.07.07