归并排序的实现.时间复杂度是O(nlgn),空间复杂度是O(n) + O(lgn).
1 #include <iostream> 2 3 using namespace std; 4 5 void merge_array(int *, int, int, int); 6 void merge_sort(int *, int, int); 7 8 int main(void) 9 { 10 11 int A[6] = {5,1,2,6,9,3}; 12 merge_sort(A, 0, 5); 13 14 for (int i=0; i<6; ++i) 15 { 16 cout << A[i] << " "; 17 } 18 19 cout << endl; 20 return 0; 21 } 22 23 void merge_sort(int A[], int p, int r) 24 { 25 if (p < r) 26 { 27 int mid = (p + r) / 2; 28 merge_sort(A, p, mid); 29 merge_sort(A, mid+1, r); 30 merge_array(A, p, mid, r); 31 } 32 } 33 34 void merge_array(int A[], int p, int mid, int r) 35 { 36 int *array1 = NULL; 37 int *array2 = NULL; 38 39 int array1_len = 0; 40 int array2_len = 0; 41 42 int i, j; 43 44 array1_len = mid - p + 1; 45 array2_len = r - mid; 46 47 array1 = new int[array1_len]; 48 array2 = new int[array2_len]; 49 50 for (i=0; i<array1_len; ++i) 51 { 52 array1[i] = A[i+p]; 53 } 54 55 for (j=0; j<array2_len; ++j) 56 { 57 array2[j] = A[mid+j+1]; 58 } 59 60 for (i=0, j=0; i<array1_len && j<array2_len;) 61 { 62 if (array1[i] < array2[j]) 63 { 64 A[p++] = array1[i++]; 65 } 66 else 67 { 68 A[p++] = array2[j++]; 69 } 70 } 71 72 while(i < array1_len) 73 { 74 A[p++] = array1[i++]; 75 } 76 77 while(j < array2_len) 78 { 79 A[p++] = array2[j++]; 80 } 81 82 delete [] array1; 83 delete [] array2; 84 }