#include <stdio.h> void mergeSort(int A[], int len); void show(int A[], int len); int main() { int A[] = {1, 3, 2, 5, 7}; int len = 5; mergeSort(A, 5); show(A, 5); return 0; } // A[p..q]和A[q+1..r]是已排序数组,该函数实现A[p..r]排序 void merge(int A[], int p, int q, int r) { int *S = new int[r-p+1]; int i = p; int j = q + 1; int k = 0; while (i <= q && j <= r) if (A[i] <= A[j]) S[k++] = A[i++]; else S[k++] = A[j++]; while (i <= q) S[k++] = A[i++]; while (j <= r) S[k++] = A[j++]; for (i=0; i<k; ++i) A[p++] = S[i]; delete []S; return ; } void mergeSort(int A[], int p, int r) { if (r > p) { int q = (p + r) / 2; mergeSort(A, p, q); mergeSort(A, q + 1, r); merge(A, p, q, r); } return ; } void mergeSort(int A[], int len) { mergeSort(A, 0, len-1); return ; } void show(int A[], int len) { for (int i=0; i<len; ++i) printf("%d/n", A[i]); return ; }