간단한 합병정렬이다.
void merge(int a[], int b[], int low, int mid, int high){
int i, l, m, k;
l = low;
m = mid + 1;
k = low;
while (l <= mid && m <= high){
if (a[l] <= a[m]){
b[k++] = a[l++];
}
else
b[k++] = a[m++];
}
if (l>mid)
for (i = m; i <= high; i++)
b[k++] = a[i];
else
for (i = l; i <= mid; i++)
b[k++] = a[i];
}
void merge_sort(int a[], int b[], int low, int high){
int mid;
if (low<high){
mid = (low + high) / 2;
merge_sort(a, sorted, low, mid);
merge_sort(a, sorted, mid + 1, high);
merge(a, sorted, low, mid, high);
}
}
'알고리즘' 카테고리의 다른 글
소수 더하기 O(n) 최적화 (0) | 2015.10.30 |
---|---|
퀵 정렬(Quick Sort) (0) | 2015.10.30 |
삽입 정렬(Insert Sort) (0) | 2015.10.30 |
선택 정렬(Select Sort) (0) | 2015.10.30 |
버블 정렬(Bubble Sort) (0) | 2015.10.30 |