티스토리 뷰
분할 정복을 이용한 정렬 알고리즘
- 분할 : 배열을 2등분하여 2개의 부분배열로 만든다.
- 정복 : 각각의 부분배열을 정렬한다. (재귀)
- 통합 : 정렬된 부분배열을 정렬된 하나의 배열로 합친다.
#define N 6
int data[N] = {40, 6, 1, 9, 3, 5};
int temp[N];
int cnt;
mergeSort(0, N - 1);
void mergeSort(int left, int right)
{
int mid = (left + right) / 2;
if (right == left)
return;
mergeSort(left, mid);
mergeSort(mid + 1, right);
merge(left, right);
}
void merge(int left, int right)
{
cnt = 0;
int mid = (left + right) / 2;
int i = left;
int j = mid + 1;
while (right >= left + cnt)
{
if (data[i] < data[j] || j > right)
{
temp[cnt++] = data[i];
i++;
}
else
{
temp[cnt++] = data[j];
j++;
}
}
for (i = 0; i < cnt; i++)
data[left + i] = temp[i];
}
- 시간복잡도 : O(Nlog(N))
- 공간복잡도 : O(N)
'공부 > SW Professional' 카테고리의 다른 글
[알고리즘] 힙 정렬(heap sort) (0) | 2021.05.25 |
---|---|
[알고리즘] 퀵 정렬(quick sort) (0) | 2021.05.25 |
[알고리즘] 삽입 정렬(insertion sort) (0) | 2021.05.25 |
[알고리즘] 버블 정렬(bubble sort) (0) | 2021.05.25 |
[Computational Thinking] 재귀함수를 제대로 읽는 법 (0) | 2021.05.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크