归并排序典型的分治策略的体现,时间复杂度是O(nlgn), 空间复杂度是O(n).属于稳定排序。
下面是C语言实现代码。
#define MAX 10000000 //p, q, r是均是元素的下标 void merge(int A[], int p, int q, int r) { int n1 = q - p + 1; int n2 = r - q; int * L = (int *)malloc(sizeof(int) * n1 + 1); int * R = (int *)malloc(sizeof(int) * n2 + 1); int i, j, k; for (i = 0; i < n1; i++) { L[i] = A[p + i]; } for (j = 0; j < n2; j++) { R[j] = A[q + j + 1]; } L[i] = MAX; R[j] = MAX; i = 0; j = 0; for (k = p; k <= r; k++) { if (L[i] <= R[j]) { A[k] = L[i]; i++; } else { A[k] = R[j]; j++; } } } void merge_sort(int A[], int p, int r) { if (p < r) { int q = (p + r) / 2; merge_sort(A, p, q); merge_sort(A, q + 1, r); merge(A, p, q, r); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/xianbt/article/details/47189455