๐ ๋น๊ต ๊ธฐ๋ฐ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
๊ธฐ๋ณธ ์ฑ๋ฅ O(n^2) : ์ ํ/๋ฒ๋ธ/์ฝ์
/์
ธ ์ ๋ ฌ
ํฅ์๋ ํ๊ท ์ฑ๋ฅ O(nlogn) : ํต/ํฉ๋ณ/ํ ์ ๋ ฌ ๐ ๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํํ
๐ฉ ์ด๋ฏธ ์ป์ด์ง ๋ฐ์ดํฐ ๋ถํฌ ์ ๋ณด๋ฅผ ํ์ฉํ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
๊ณ์/๊ธฐ์/๋ฒํท ์ ๋ ฌ ๐ ์ ํ ์๊ฐ O(n) ๊ฐ๋ฅ
๐ฉ ๋ฐ์ดํฐ ๊ฐ์ ์ง์ ๋น๊ตํ์ง ์๊ณ , ๋จ์ํ๊ฒ ๊ฐ ์ซ์๊ฐ ๋ช ๊ฐ ์๋์ง ๊ฐ์๋ฅผ ์ธ์ด ์ ์ฅํ ํ์ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ
๊ธฐ์กด์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์์น๋ฅผ ๋ฐ๊พธ๋ฉฐ ์ ๋ ฌํ์ง๋ง, ๊ณ์ ์ ๋ ฌ์ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์๋ง ์ธ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์์น๋ฅผ ๋ณ๊ฒฝํ ํ์ ์์
๐ฉ ํน์ง ๋ฐ ์ฅ๋จ์
๊ฐ ๋น๊ต๊ฐ ์ผ์ด๋์ง ์์ ์๋๊ฐ ๋น ๋ฅด๋ค.
ํ์ง๋ง, ๊ฐ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด์ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ ๊ณต๊ฐ ํ์
๐ ์ ๋ ฌํด์ผํ ์์ ๋ฒ์๊ฐ ์์ ๋์๋ง ์ ๋ฆฌํ๋ค.
EX) 0, 100, 2, 10, 10000 ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
์๋ฅผ ๋ค์ด์ ์ ๋ ฌํด์ผ ํ ์๊ฐ 0, 100, 2, 10, 10000์ด๋ฉด ๊ณ ์ 5๊ฐ์ ์๋ฅผ ์ ๋ ฌํ๋๋ฐ 0๋ถํฐ 10000๊น์ง์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋น๋๊ณ ๋ฐ๋ณต๋ฌธ๋ ๋ถํ์ํ๊ฒ ๋์์ผ ํ๋ค.
(์ฅ) ๋ฐ์ดํฐ์ ๋ฒ์๊ฐ ์์ ๋๋ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฏ๋ก ๋งค์ฐ ๋น ๋ฅด๋ค.
(๋จ) ๋ฐ์ดํฐ์ ๋ฒ์๊ฐ ํฌ๋ฉด ๋ง๋ค์ด์ผ ํ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ํฌ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ญ๋น๊ฐ ์ฌํ๋ค.
๐ฉ ๊ณผ์
1. ์ ๋ ฌํ๊ณ ์ ํ๋ ๋ฐฐ์ด์ ์ต๋๊ฐ์ ๊ตฌํ๊ธฐ
2. ์ต๋๊ฐ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ํํ๋ฉฐ ํด๋น ๊ฐ์ด ๋ช ๊ฐ์ธ์ง ์ ์ฅ
3. ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์ถ๋ ฅ
EX) 1, 3, 2, 4, 3, 2, 5, 3, 1 , 2, 3, 4, 4, 3, 5, 1, 2, 3, 5 ,2, 3, 1, 4, 3, 5, 1, 2, 1, 1, 1 ์ ๋ ฌํ๊ธฐ
0. ์ด๊ธฐ ์ํ
1 3 2 4 3 2 5 3 1 2 3 4 4 3 5 1 2 3 5 2 3 1 4 3 5 1 2 1 1 1
ํฌ๊ธฐ = 1 | ํฌ๊ธฐ = 2 | ํฌ๊ธฐ = 3 | ํฌ๊ธฐ = 4 | ํฌ๊ธฐ = 5 |
0 | 0 | 0 | 0 | 0 |
1. 1๋ฒ์งธ ์ํ
1 3 2 4 3 2 5 3 1 2 3 4 4 3 5 1 2 3 5 2 3 1 4 3 5 1 2 1 1 1
ํฌ๊ธฐ = 1 | ํฌ๊ธฐ = 2 | ํฌ๊ธฐ = 3 | ํฌ๊ธฐ = 4 | ํฌ๊ธฐ = 5 |
1 | 0 | 0 | 0 | 0 |
2. 2๋ฒ์งธ ์ํ
1 3 2 4 3 2 5 3 1 2 3 4 4 3 5 1 2 3 5 2 3 1 4 3 5 1 2 1 1 1
ํฌ๊ธฐ = 1 | ํฌ๊ธฐ = 2 | ํฌ๊ธฐ = 3 | ํฌ๊ธฐ = 4 | ํฌ๊ธฐ = 5 |
1 | 0 | 1 | 0 | 0 |
3. 3๋ฒ์งธ ์ํ
1 3 2 4 3 2 5 3 1 2 3 4 4 3 5 1 2 3 5 2 3 1 4 3 5 1 2 1 1 1
ํฌ๊ธฐ = 1 | ํฌ๊ธฐ = 2 | ํฌ๊ธฐ = 3 | ํฌ๊ธฐ = 4 | ํฌ๊ธฐ = 5 |
1 | 1 | 1 | 0 | 0 |
4. 4๋ฒ์งธ ์ํ
1 3 2 4 3 2 5 3 1 2 3 4 4 3 5 1 2 3 5 2 3 1 4 3 5 1 2 1 1 1
ํฌ๊ธฐ = 1 | ํฌ๊ธฐ = 2 | ํฌ๊ธฐ = 3 | ํฌ๊ธฐ = 4 | ํฌ๊ธฐ = 5 |
1 | 1 | 1 | 1 | 0 |
5. 5๋ฒ์งธ ์ํ
1 3 2 4 3 2 5 3 1 2 3 4 4 3 5 1 2 3 5 2 3 1 4 3 5 1 2 1 1 1
ํฌ๊ธฐ = 1 | ํฌ๊ธฐ = 2 | ํฌ๊ธฐ = 3 | ํฌ๊ธฐ = 4 | ํฌ๊ธฐ = 5 |
1 | 1 | 2 | 1 | 0 |
6. 6๋ฒ์งธ ์ํ
1 3 2 4 3 2 5 3 1 2 3 4 4 3 5 1 2 3 5 2 3 1 4 3 5 1 2 1 1 1
ํฌ๊ธฐ = 1 | ํฌ๊ธฐ = 2 | ํฌ๊ธฐ = 3 | ํฌ๊ธฐ = 4 | ํฌ๊ธฐ = 5 |
1 | 2 | 2 | 1 | 0 |
๋ฐ๋ก ์์ ๊ฐ์ด ํด๋น ํฌ๊ธฐ์ ์์๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ ์ซ์๋ฅผ 1์ฉ ๋ํด๊ฐ๋ฉด ๋๋ค. ๋๊ฐ์ ๋ฐฉ์์ ๋ฐ๋ณตํ๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋๋ค.
ํฌ๊ธฐ = 1 | ํฌ๊ธฐ = 2 | ํฌ๊ธฐ = 3 | ํฌ๊ธฐ = 4 | ํฌ๊ธฐ = 5 |
8 | 6 | 8 | 4 |
4 |
์ด์ ํฌ๊ธฐ 1๋ถํฐ 5๊น์ง ํด๋น ์ซ์๋งํผ ์ถ๋ ฅํ๋ฉด ์ ๋ ฌ์ ๋๋๋ค. ์ฆ, 1์ 8๋ฒ, 2๋ฅผ 6๋ฒ, 3์ 8๋ฒ, 4๋ฅผ 4๋ฒ, ๊ทธ๋ฆฌ๊ณ 5๋ฅผ 4๋ฒ ์ถ๋ ฅํ๋ฉด ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๋ค.
์ ๋ ฌ ํ : 1 1 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 5 5 5 5
static void countingSort() {
// ์ ๋ ฌํ ๋ฐฐ์ด
int[] array = {1, 3, 2, 4, 3, 2, 5, 3, 1 , 2,
3, 4, 4, 3, 5, 1, 2, 3, 5 ,2,
3, 1, 4, 3, 5, 1, 2, 1, 1, 1};
// ํฌ๊ธฐ๊ฐ ์ต๋๊ฐ ๋งํผ์ ๊ณ์ ์ธ๊ธฐ์ฉ ๋ฐฐ์ด
int[] count = new int[6];
for (int i = 0; i < array.length - 1; i++) {
count[array[i]]++;
}
// ๊ณ์๋งํผ i ์ถ๋ ฅ. 0์ด๋ฉด ์ถ๋ ฅํ์ง ์๋๋ค
for (int i = 1; i <= 5; i++) {
if (count[i] != 0) {
for (int j = 1; j <= count[i]; j++) {
System.out.print(i + " ");
}
}
}
}
๐ฉ ์๊ฐ๋ณต์ก๋
๋ฐฐ์ด์ ์๋ ์์๋ค์ ๊ฐ์๋ง ์ธ๊ณ ์์ ์๋ถํฐ ๋์ดํ๋ฏ๋ก O(n)
๊ตฌ์ฒด์ ์ผ๋ก๋ O(n+k)๋ผ ํ ์ ์๋ค. k๋ ๋ฐฐ์ด์ ์ต๋๊ฐ
'๐ฉโ๐ป ํ๋ก๊ทธ๋๋ฐ > ๐ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฒํท ์ ๋ ฌ(Bucket Sort) (0) | 2024.04.13 |
---|---|
๊ธฐ์ ์ ๋ ฌ(Radix Sort) (0) | 2024.04.13 |
ํ ์ ๋ ฌ(Heap Sort) (0) | 2024.04.13 |
ํฉ๋ณ ์ ๋ ฌ(Merge Sort) (0) | 2024.04.12 |
ํต ์ ๋ ฌ(Quick Sort) (0) | 2024.04.12 |