-
-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Open
Description
int delete_max_heap() {
if(heapSize == 0) // ๋ฐฐ์ด์ด ๋น์ด์์ผ๋ฉด ๋ฆฌํด
return 0;
int item = maxHeap[1]; // ๋ฃจํธ ๋
ธ๋์ ๊ฐ์ ์ ์ฅ
maxHeap[1] = maxHeap[heapSize]; // ๋ง์ง๋ง ๋
ธ๋ ๊ฐ์ ๋ฃจํธ๋ก ์ด๋
maxHeap[heapSize--] = 0; // ํ ํฌ๊ธฐ๋ฅผ ํ๋ ์ค์ด๊ณ ๋ง์ง๋ง ๋
ธ๋ 0 ์ด๊ธฐํ
for(int i = 1; i*2 <= heapSize;) {
// ๋ง์ง๋ง ๋
ธ๋๊ฐ ์ผ์ชฝ ๋
ธ๋์ ์ค๋ฅธ์ชฝ ๋
ธ๋๋ณด๋ค ํฌ๋ฉด ๋
if(maxHeap[i] > maxHeap[i*2] && maxHeap[i] > maxHeap[i*2+1]) {
break;
}
// ์ผ์ชฝ ๋
ธ๋๊ฐ ๋ ํฐ ๊ฒฝ์ฐ, swap
else if (maxHeap[i*2] > maxHeap[i*2+1]) {
swap(i, i*2);
i = i*2;
}
// ์ค๋ฅธ์ชฝ ๋
ธ๋๊ฐ ๋ ํฐ ๊ฒฝ์ฐ
else {
swap(i, i*2+1);
i = i*2+1;
}
}
return item;
}
"i2+1" ์ด heapSize ๋ฒ์ ์์ ์๋์ง์ ๋ํ ์ฒดํฌ๊ฐ ์์ด์ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. for ๋ฌธ์์ i2 <= heapSize๋ง ์ฒดํฌํ๊ณ ์๊ธฐ ๋๋ฌธ์, i2๊ฐ heapSize์ผ๋, i2+1์ด heapSize๋ฅผ ๋ฒ์ด๋์ ์ ํจํ์ง ์์ ๋ฐฐ์ด์ ๊ฐ๊ณผ ๋น๊ตํ ๊ฒ ๊ฐ์ต๋๋ค. ์ฝ๋ ์์ ์ด ํ์ํด ๋ณด์ ๋๋ค.
Metadata
Metadata
Assignees
Labels
No labels