합병 정렬(Merge Sort)
- 메인 함수
123456789101112int main(int argc, char** argv) {int A[8] = {36, 2, 3, 15, 32, 4, 10, 30};int n = sizeof(A) / sizeof(A[0]);MergeSort(A, n, 0, 7);for(int i=0; i<n; i++){printf("%d ", A[i]);}printf("\n");return 0;} - 합병 정렬
12345678910111213141516171819202122232425262728void Merge(int A[], int n, int first, int mid, int last){int tmp[n];int first1 = first;int last1 = mid;int first2 = mid + 1;int last2 = last;int i;while( first1 <= last1 && first2 <= last2 ){if(A[first1] < A[first2]){tmp[i++] = A[first1++];}else{tmp[i++] = A[first2++];}}while(first1 <= last1){tmp[i++] = A[first1++];}while(first2 <= last2){tmp[i++] = A[first2++];}for(int i=first; i<=last; i++){A[i] = tmp[i];}}
12345678void MergeSort(int A[], int n, int first, int last){if(first < last){int mid = (first + last) / 2;MergeSort(A, n, first, mid);MergeSort(A, n, mid+1, last);Merge(A, n, first, mid, last);}}