/*¹é²¢ÅÅÐò*/
#include <iostream>
using namespace std;
void mergeall(int a[],int first,int mid,int end,int t[]){
int i = first;
int j = mid+1;
int k =0;
while(i<= mid && j <= end){
if(a[i] <= a[j]){
t[k++] = a[i++];
}else{
t[k++] = a[j++];
}
}
while(j <= end){
t[k++] = a[j++];
}
while(i <= mid){
t[k++] = a[i++];
}
for(int m = 0;m <k;m++){
a[first+m] = t[m];
}
}
void merge(int a[],int first,int end,int t[]){
int mid = (first+end)/2;
if(first<end){
merge(a,first,mid,t);
merge(a,mid+1,end,t);
mergeall(a,first,mid,end,t);
}
}
void mergefirst(int a[],int first,int end){
int * t = new int[8];
merge(a,first,end,t);
delete []t;
}
void main(){
int a[8] = {3,1,4,2,6,7,9,8};
mergefirst(a,0,7);
for(int i =0;i<8;i++){
cout << a[i];
}
}
遇到的问题:
一开始没有mergefirst函数,直接在merge函数中new了一个动态数组,但是会导致debug error;
难点:
在于mergeall函数,采用直接插入的方法,复杂度为O(n).
参考:http://blog.youkuaiyun.com/morewindows/article/details/6678165