๊ณ์ ์ ๋ ฌ (Counting Sort) ์๊ณ ๋ฆฌ์ฆ :
๊ณ์ ์ ๋ ฌ = ๋์ ์ ๋ ฌ = ์นด์ดํ ์ ๋ ฌ
์์์ ๋์ ๊ด๊ณ๋ฅผ ํ๋จํ์ง ์๊ณ ๋น ๋ฅด๊ฒ ์ ๋ ฌํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ
1. ๋ฐฐ์ด ๋ด ์์ ๊ฐ๋ค์ ๊ฐ์๋ฅผ ์ ์ฅํ๋ ์นด์ดํ ๋ฐฐ์ด์ ๋ง๋ ๋ค
2. ์นด์ดํ ๋ฐฐ์ด์ ์์์ ์ง์ ์์์ ๊ฐ์ ๋ํด์ค๋ค.
3. ๋ฐฐ์ด๊ณผ ๊ฐ์ ํฌ๊ธฐ์ ์ถ๋ ฅ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ์ ๋ ฅ ๋ฐฐ์ด์ ์ญ์์ผ๋ก ์ถ๋ ฅ ๋ฐฐ์ด์ ์์๋ค์ ์ฑ์๋ฃ๋๋ค.
3-1. ๋ฐฐ์ด a์ ๋งจ ๋ท ์์ 8์ ๊บผ๋ด counting[8]์ ํ์ธ
3-2. ๋ฐฐ์ด b์ counting[8]-- ํ counting[8] ์๋ฆฌ์ 8์ ์ ์ฅ
4. ๋ฐฐ์ด b๋ฅผ ๋ฐฐ์ด a๋ก ๋ณต์ฌํ๋ค
๋ฉ์๋ countingSort() : ๋ฐฐ์ด a๋ฅผ ์นด์ดํ ์ ๋ ฌ
๋งค๊ฐ๋ณ์ : int[] a, int n
- ์นด์ดํ ์ ๋ ฌ :
void countingSort(int[] a, int n) {
int max = a[0];
for(int i = 0; i < n; i++) {
if(a[i] > max)
max = a[i];
}
int[] counting = new int[max+1];
int[] b = new int[n];
for(int i = 0; i < n; i++) counting[a[i]]++;
for(int i = 1; i <= max; i++) counting[i] += counting[i-1];
for(int i = n-1; i >= 0; i--) b[--counting[a[i]]] = a[i];
for(int i = 0; i < n; i++) a[i] = b[i];
}
์นด์ดํ ์ ๋ ฌ Counting Sort :
์ต์ = O(N), ํ๊ท = O(N), ์ต์ = O(N)
์์ ํ ์ ๋ ฌ