标签:
#define Max 2147483647 #include <iostream> #include <cstdlib> using namespace std; void Merge(int *A, int p, int q, int r) { int i, j; int n1 = q - p + 1; int n2 = r - q; //归并堆 int *L = new int[n1 + 1]; //归并堆 int *R = new int[n2 + 1]; for (i = 0; i < n1; ++i) { L[i] = A[p + i - 1]; } for (j = 0; j < n2; ++j) { R[j] = A[q + j]; } L[n1] = Max; R[n2] = Max; i = 0; j = 0; for (int k = p - 1; k < r; ++k) { if (L[i] <= R[j]) { A[k] = L[i++]; } else { A[k] = R[j++]; } } } void MergeSort(int *A, int p, int r) { if (p < r) { int q = (p + r) / 2; MergeSort(A, p, q); MergeSort(A, q + 1, r); Merge(A, p, q, r); } } int main(void) { int A[7] = { 18, 45, 36, 30, 92, 72, 25 }; MergeSort(A, 1, 7); for (int i = 0; i < 7; ++i) { cout << A[i] << " "; } cout << endl; system("pause"); return 0; }
分析:T(n) = c 若n=1
=2T(n/2)+cn 若n>1
解得:T(n) = 2^(log(2)n)T(1) + (2^0+2^1+···+2^(log(2)n - 1))cn
=2^(log(2)n)c + (2^0+2^1+···+2^(log(2)n - 1))cn
总代价为cnlgn+cn,它就是O(nlgn)。
标签:
原文地址:http://www.cnblogs.com/mubu/p/5786033.html