时间复杂度O(N*logN) 空间复杂度O(N) 对应申请的临时存储空间,应该及时释放,避免内存猛增与内存泄露 #include<stdio.h> #include<stdlib.h> //array[begin...mid] is sorted //array[mid+1...end] is also sorted void merge(int *arr, int begin, int mid, int end) { int leftLen = mid-begin+1; int rightLen = end-mid; int *left = new int[leftLen]; int *right = new int[rightLen]; for(int i=begin; i<=mid; i++) { left[i-begin] = arr[i]; } for(int i=mid+1; i<=end; i++) { right[i-mid-1] = arr[i]; } int i,j; int index = begin; for(i=j=0; i<leftLen && j<rightLen; ) { if(left[i] < right[j]) { arr[index++] = left[i++]; } else { arr[index++] = right[j++]; } } while(i<leftLen) { arr[index++] = left[i++]; } while(j<rightLen) { arr[index++] = right[j++]; } delete left; delete right; } void mergeSort(int *arr, int begin, int end) { if(begin >= end) return ; int mid = (begin+end)/2; mergeSort(arr, begin, mid); mergeSort(arr, mid+1, end); merge(arr, begin, mid, end); } int main() { int arr[] = {4,2,8,1,5,3,9,7,6}; mergeSort(arr, 0, 8); for(int i=0; i<9; i++) { printf("%d ", arr[i]); } system("pause"); return 0; }