/* * Mege sort */ #include #define MAX 16 int rand(void); void merge(int arr[], int low, int mid, int high); void sort(int arr[], int low, int high); int main(void) { int buf[MAX], i; for(i = 0; i < MAX; i++) { buf[i] = rand(); printf("%6d", buf[i]); } printf("\n"); sort(buf, 0, MAX-1); for(i = 0; i < MAX; i++) { printf("%6d", buf[i]); } printf("\n"); return 0; } void sort(int arr[], int low, int high) { int mid; if(low < high) // if not one-element array { mid = (low + high)/2; sort(arr, low, mid); sort(arr, mid+1, high); merge(arr, low, mid, high); } } void merge(int arr[], int low, int mid, int high) { int i, m, k, l, temp[MAX]; l = low; i = low; m = mid + 1; while((l <= mid) && (m <= high)) { if(arr[l] <= arr[m]) { temp[i] = arr[l]; l++; } else { temp[i] = arr[m]; m++; } i++; } if(l > mid) { for(k = m;k <= high;k++) { temp[i] = arr[k]; i++; } } else { for(k = l;k <= mid;k++) { temp[i] = arr[k]; i++; } } for(k = low;k <= high;k++) { arr[k] = temp[k]; } }