2014上半年软件设计师算法题代码
#include <stdio.h>
#include <stdlib.h>
#define MAX 65536
void merge (int arr[], int p, int q, int r) {
int *left, *right;
int n1, n2, i, j, k;
n1 = q - p + 1;
n2 = r - q;
if ((left = (int*)malloc((n1 + 1)*sizeof(int))) == NULL) {
perror("malloc error");
exit(1);
}
if ((right = (int*)malloc((n2 + 1)*sizeof(int))) == NULL) {
perror("malloc error");
exit(1);
}
for (i = 0; i < n1; i ++) {
left[i] = arr[p + i];
}
left[i] = MAX;
for (i = 0; i < n2; i ++) {
right[i] = arr[q + i + 1];
}
right[i] = MAX;
i = 0; j = 0;
for (k = p; k < r + 1; k ++) {
if (left[i] > right[j]) {
arr[k] = right[j];
j ++ ;
} else {
arr[k] = left[i];
i ++ ;
}
}
}
void mergeSort (int arr[], int begin, int end) {
int mid;
if (begin < end) {
mid = (begin + end) / 2;
mergeSort(arr, begin, mid);
mergeSort(arr, mid + 1, end);
merge(arr, begin, mid, end);
}
}
int main () {
int arr[] = {2, 1, 4, 6, 53, 3, 10, -7};
mergeSort(arr, 0, 7);
int i;
for (i = 0; i < 8; i ++) {
printf("%d ", arr[i]);
}
}