์๋ ํ์ธ์ ์ฃผ์ธ์ฅ H์ ๋๋ค. ์ค๋์ ๋ณํฉ์ ๋ ฌ์ ๋ํด ๋ฐฐ์๋ณด๊ฒ ์ต๋๋ค.
๋ณํฉ์ ๋ ฌ์ ์์ด ํค์๋๋ ํต์ ๋ ฌ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ถํ ์ ๋ณต์ ์ฑํํ๋ค๋ ๊ฑด๋ฐ์.
์ฐจ์ด์ ์ ํผ๋ฒ์ด ์กด์ฌํด์ ๋๋คํ๊ฒ ๋๋๋ ํต๊ณผ ๋ฌ๋ฆฌ ๋ณํฉ์ ๋ ฌ์
์ ํํ ๋ฐ์ฉ ๋๋๋๋ค.
"์ผ๋จ ๋ฐ์ผ๋ก ๋๋๊ณ ๋์ค์ ํฉ์ณ์ ์ ๋ ฌํ๋ฉด ์ด๋จ๊น?"๋ ํค์๋๋ฅผ ์๊ฐํด์ผํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํต์ ๋ ฌ๊ณผ ๋ฌ๋ฆฌ O(N*log N)์ ํญ์ ๋ณด์ฅํด์ค๋๋ค.
์๋ฅผ ๋ค์ด 7 6 5 9 2 1 5 3 ๋ผ๊ณ ํ๋ค๋ฉด
2์ ๋ฐฐ์๋ก ์ชผ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋ถ์ด์๋ ๊ฒ๋ผ๋ฆฌ ๋น๊ตํ์
67 59 12 35 ๊ฐ ๋๊ณ
5679 1235
12355679 ๊ฐ ๋ฉ๋๋ค.
//O(N*log N) ๋ถํ ์ ๋ณต ์ฑํ, ์ ํํ ๋ฐ์ฉ ๋๋,
//ํญ์ nlogn๋ณด์ฅ
//์ผ๋จ ๋ฐ์ผ๋ก ๋๋๊ณ ๋์ค์ ํฉ์ณ์ ์ ๋ ฌํ๋ฉด ์ด๋จ๊น?
//ํผ๋ฒ๊ฐ์ด ์๊ณ ํญ์ ๋ฐ์ผ๋ก ๋๋
//ํฉ์น ๋ 2์ ๋ฐฐ์๋งํผ ํฉ์นจ
#include <stdio.h>
# define number 8
int sorted[8];
//์ ๋ ฌ ๋ฐฐ์ด์ ๋ฐ๋์ ์ ์ญ๋ณ์๋ก ์ ์ธ
//์ถ๊ฐ์ ์ธ ๋ฐฐ์ด์ด ํ์ํ๋ฐ ํ์ํ ๋๋ง๋ค ๋ฐฐ์ด์ ์์ฑํ๋๊ฒ ๋นํจ์จ์
//๋ชจ๋ ํจ์๊ฐ ๊ณตํต์ ์ผ๋ก sorted ๋ฐฐ์ด์ ์ฌ์ฉ
void merge(int a[], int m, int middle, int n) {
int i = m;
int j = middle + 1;
int k = m;
//์์ ์์๋๋ก ๋ฐฐ์ด์ ์ฝ์
.
while (i <= middle && j <= n) {
if (a[i] <= a[j]) {
sorted[k] = a[i];
i++;
}
else {
sorted[k] = a[j];
j++;
}
k++;
}
//๋จ์ ๋ฐ์ดํฐ๋ ์ฝ์
if (i > middle) {
for (int t = j; t <= n; t++) {
sorted[k] = a[t];
k++;
}
}
else{
for (int t = i; t <= middle; t++) {
sorted[k] = a[t];
k++;
}
}
//์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ฝ์
for (int t = m; t <= n; t++) {
a[t] = sorted[t];
}
}
void mergeSort(int a[], int m, int n) {
//์ด์ธ์ ๊ฒฝ์ฐ๋ ํฌ๊ธฐ๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ
if (m < n) {
int middle = (m + n) / 2;
mergeSort(a, m, middle);
mergeSort(a, middle + 1, n);
merge(a, m, middle, n);
}
}
int main(void) {
int array[number] = { 7,6,5,8,3,5,9,1 };
mergeSort(array, 0, number - 1);
for (int i = 0; i < number; i++) {
printf("%d ", array[i]);
}
return 0;
}
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ์ํฅ์ ํ์ ๋ ฌ heapsort (0) | 2020.08.13 |
---|---|
[์๋ฃ๊ตฌ์กฐ] c++ sortํจ์๋ฅผ ํ์ฉํ ์ ๋ ฌ (0) | 2020.08.12 |
[์๋ฃ๊ตฌ์กฐ] ํต์ ๋ ฌ Quick Sort (0) | 2020.08.04 |
[์๋ฃ๊ตฌ์กฐ] ๋ฒ๋ธ์ ๋ ฌ Bubble Sort (0) | 2020.08.04 |
Insertion Sort ์ฝ์ ์ ๋ ฌ (0) | 2020.08.04 |