편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
5번째 줄: | 5번째 줄: | ||
<syntaxhighlight lang='c'> | <syntaxhighlight lang='c'> | ||
#include <stdio.h> | #include <stdio.h> | ||
void merge_merge(int a[], int left, int middle, int right) { | |||
int temp[right-1], i, j, k; | |||
for(i=left, j=left, k=middle+1; j<=middle && k<=right; i++) { | |||
if(a[j]<=a[k]) temp[i]=a[j++]; | |||
else temp[i]=a[k++]; | |||
} | |||
while( j<=middle ) temp[i++]=a[j++]; | |||
while( k<=right ) temp[i++]=a[k++]; | |||
for(i=left; i<=right; i++) a[i]=temp[i]; | |||
} | |||
void merge_sort(int a[], int left, int right) { | void merge_sort(int a[], int left, int right) { | ||
if(left >= right) return; | |||
int middle = (left+right)/2; | |||
merge_sort(a, left, middle); | |||
merge_sort(a, middle+1, right); | |||
merge_merge(a, left, middle, right); | |||
} | } | ||
int main() { | int main() { | ||
int arr[] = {9,1,22,4,0,-1,1,22,100,100}; | int arr[] = {9,1,22,4,0,-1,1,22,100,100}; | ||
int size = sizeof(arr)/sizeof(int); | int size = sizeof(arr)/sizeof(int); | ||
merge_sort(arr, 0, size-1); | |||
for(int i=0; i<size; i++) printf("%d ", arr[i]); | |||
// -1 0 1 1 4 9 22 22 100 100 | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |