归并排序思想:先分后合,每次合并的子数组序列是有序的
时间复杂度:O(nlog2n),空间代价为O(n)
代码如下:
int a[10]={1,23,4,5,7,9,0,5,3,26},b[10]={0};
void merge(const int left,const int mid,const int right){
int s1=left;
int s2=mid;
int s3=right,k,t=left;
for(k=left;k<=mid;k++)
b[k]=a[k];
for(k=right;k>mid;k--)//颠倒顺序
b[right+mid+1-k]=a[k];
while(t<=right){
if(b[s1]<=b[s3])a[t++]=b[s1++];
else a[t++]=b[s3--];
}
}
void mergesort(int left,int right){
if(left>=right)
return;
int mid=(left+right)/2;
mergesort(left,mid);
mergesort(mid+1,right);
merge(left,mid,right);
}
void show(){
for(int i=0;i<10;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
int main(){
show();
mergesort(0,9);
show();
return 0;
}