์๋ ํ์ธ์ ์ฃผ์ธ์ฅ H์ ๋๋ค.
์ง๊ธ๊น์ง ์ ํ, ๋ฒ๋ธ, ์ฝ์ , ํต, ๋ณํฉ, ํ ์ ๋ ฌ์ ๊ฐ๋ ์ ๊ณต๋ถํด๋ณด์๊ณ ,
๊ฐ์ฅ ๋นผ์ด ์ ๋ ฌ์ O(N * log N)์ด ๋์ค๋ ํต, ๋ณํฉ, ํ ์ ๋ ฌ ์ด์์ต๋๋ค.
ํ์ง๋ง ์ด๋ณด๋ค ๋์ฑ ๋น ๋ฅธ ์ ๋ ฌ์ ์งํํด์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์
๋ค์์ 3 ์ดํ์ ๋ฐ์ดํฐ ์์ฐ์๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ฆฌํ์ธ์
1 3 2 3 1 2 3 2 1 3
10๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ 3์์ ์๋๊ฑธ ์ ์ ์๋๋ฐ์. ์ด์ฒ๋ผ ๋ฒ์์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ์ ํํด
๊ต์ฅํ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ ์ ๋๋ค. ์๋๋ O(N)์ ๋๋ค.
๊ณ์์ ๋ ฌ์ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐฏ์๋ฅผ ์ธ๋ฉด ์ด๋จ๊น? ๋ ๋ฐ์์์ ์์ํฉ๋๋ค.
์ฆ ์ธ๊ฐ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ 1์ด๋ฉด arr[0]++ 3์ด๋ฉด arr[2]++ ์ด๋ฐ์์ผ๋ก ์ซ์๋ฅผ ์ธ์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ซ์์ ๊ฐฏ์๊ฐ ์ธ์งํ ๊ณ
1์ arr[0]์ ๊ฐ๋งํผ, 2๋ฅผ arr[1]์ ๊ฐ๋งํผ ๋ฐ๋ณตํด์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๊ฒ ์ง์.
//๋ฒ์์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ์ ํํด์ ๋น ๋ฅธ ์ ๋ ฌ
//ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐฏ์๋ฅผ ์ธ๋ฉด ์ด๋จ๊น?
//์์น ๋ฐ๊ฟ ํ์ ์์ O(N)
#include <stdio.h>
int main(void) {
int temp;
int count[5];
int array[30] = { 1,3,2,4,3,2,5,3,1,2,
1,3,2,4,3,2,5,3,1,2,
1,3,2,4,3,2,5,3,1,2 };
//count 0์ผ๋ก ์ด๊ธฐํ
for (int i = 0; i < sizeof(count) / sizeof(int); i++) {
count[i] = 0;
}
//count ์ array index์์ ์๋ ๊ฐ์ ๋ง๊ฒ ์๋ง์ count index ์ ๋ฃ์ด์ค
for (int i = 0; i < sizeof(array) / sizeof(int); i++) {
count[array[i] - 1]++;
}
//count[i]์ ์๋ ๊ฐ์ ๊ฐ๋ง๋ฒ ์ถ๋ ฅํ๋ค.
for (int i = 0; i < sizeof(count) / sizeof(int); i++) {
if (count[i] != 0) {
for (int j = 0; j < count[i]; j++) {
printf("%d ", i + 1);
}
}
}
return 0;
}
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C์ธ์ด] ์ฐ๊ฒฐ๋ฆฌ์คํธ (linked list) (0) | 2020.11.06 |
---|---|
[C์ธ์ด] ๋ฐฐ์ด๋ก ๊ตฌํํ ๋ฆฌ์คํธ (0) | 2020.11.06 |
[์๋ฃ๊ตฌ์กฐ] ์ํฅ์ ํ์ ๋ ฌ heapsort (0) | 2020.08.13 |
[์๋ฃ๊ตฌ์กฐ] c++ sortํจ์๋ฅผ ํ์ฉํ ์ ๋ ฌ (0) | 2020.08.12 |
[์๋ฃ๊ตฌ์กฐ] ๋ณํฉ์ ๋ ฌ merge sort (0) | 2020.08.06 |