归并排序,将待排序序列分为较小的序列进行排序后,将排序好的组合重新组合成一个新的序列进行排序。对于递归实现,每次子序列长度为原序列的一半,则有logn层,每一层需要O(n)的时间复杂度,所有时间复杂度为O(nlogn)
#include <iostream>
using namespace std;
#include<cstdio>
int printarry(int* arry,int len){
for(int i=0 ; i<len ; i++ ){
printf("%d ",arry[i]);
}
printf("\n");
return 1;
}
int megersort(int* sorted,int* tsorted,int mleft,int mright){
if (mleft == mright)
return 1;
int mid = (mright+mleft)/2;
megersort(sorted,tsorted,mleft,mid);
megersort(sorted,tsorted,mid+1,mright);
for (int i = mleft;i <= mright;i++)
tsorted[i] = sorted[i];
int l1 = mleft;
int l2 = mid+1;
printf("mleft %d , mright %d \n",mleft,mright);
printarry(sorted,7);
for (int i = mleft ; i <= mright;i++){
if(l1 >= mid+1)
sorted[i] = tsorted[l2++];
else if (l2 > mright)
sorted[i] = tsorted[l1++];
else if(tsorted[l1] > tsorted[l2])
sorted[i] = tsorted[l2++];
else
sorted[i] = tsorted[l1++];
}
printarry(sorted,7);
return 1;
}
int main(){
cout << "Hello world!" << endl;
int sortarry[] = {5,2,72,1,777,2,22};
int tsortarry[1000] = {0};
int len = sizeof(sortarry)/sizeof(int);
printf("unsorted arry len is %d ,value is: ",len);
printarry(sortarry,len);
int right = len-1 ;
megersort(sortarry,tsortarry,0,right);
printf("sorted arry len is %d ,value is: " ,len);
printarry(sortarry,len);
return 0;
}