一:解题思路
Time:O(n*log(n)),Space:O(n)
二:完整代码示例 (C++版和Java版)
C++:
template <typename T> static void Merge(T array[], T helper[], int begin,int mid,int end,bool min2max=true) { int i=begin; int j=mid+1; int k=begin; while(i<=mid && j<=end) { if(min2max?(array[i]<array[j]):(array[i]>array[j])) { helper[k++]=array[i++]; } else { helper[k++]=array[j++]; } } while(i<=mid) helper[k++]=array[i++]; while(j<=end) helper[k++]=array[j++]; for(int i=begin;i<=end;i++) { array[i]=helper[i]; } } template <typename T> static void Merge(T array[],T helper[],int begin,int end,bool min2max=true) { if(begin>=end) return; int mid=begin+(end-begin)/2; Merge(array,helper,begin,mid,min2max); Merge(array,helper,mid+1,end,min2max); Merge(array,helper,begin,mid,end,min2max); } template <typename T> static void Merge(T array[],int len,bool min2max=true) {
if(len==0) return; T* helper=new T[len]; Merge(array,helper,0,len-1,min2max); delete[] helper; }
Java:
private void Merge(int[] array,int[] helper,int begin,int mid,int end) { int i=begin; int j=mid+1; int k=begin; while(i<=mid && j<=end) { if(array[i]<array[j]) { helper[k++]=array[i++]; } else { helper[k++]=array[j++]; } } while (i<=mid) helper[k++]=array[i++]; while(j<=end) helper[k++]=array[j++]; for(int p=begin;p<=end;p++) { array[p]=helper[p]; } } private void Merge(int[] array,int[] helper,int begin,int end) { if(begin>=end) return; int mid=begin+(end-begin)/2; Merge(array,helper,begin,mid); Merge(array,helper,mid+1,end); Merge(array,helper,begin,mid,end); } public void Merge(int[] array) { if(array==null || array.length==0) return; int n=array.length; int[] helper=new int[n]; Merge(array,helper,0,n-1); }
原文:https://www.cnblogs.com/repinkply/p/12795577.html