归并排序
#include <stdio.h> #include <stdlib.h> int n; /* * 合并 */ void Merge(int *source, int *target, int i, int m, int n) { int j, k; for (j = m + 1, k = i; i <= m && j <= n; k++) { if (source[i] <= source[j]) { target[k] = source[i++]; } else { target[k] = source[j++]; } } while (i <= m) { target[k++] = source[i++]; } while (j <= n) { target[k++] = source[j++]; } } /* * 归并排序 */ void MergeSort(int *source, int *target, int s, int t) { int m, *temp; if (s == t) { target[s] = source[s]; } else { temp = (int*) malloc(sizeof(int) * (t - s + 1)); m = (s + t) / 2; MergeSort(source, temp, s, m); MergeSort(source, temp, m + 1, t); Merge(temp, target, s, m, t); } } int main() { int i; int *array; printf("请输入数组的大小:"); scanf("%d", &n); array = (int*) malloc(sizeof(int) * n); printf("请输入数据(用空格分隔):"); for (i = 0; i < n; i++) { scanf("%d", &array[i]); } MergeSort(array, array, 0, n - 1); printf("排序后为:"); for (i = 0; i < n; i++) { printf("%d ", array[i]); } printf("\n"); }