一、基本思想
1、分而治之思想,将数组分成若干组,直到将每个数字分为一组。
2、将若干个小数组进行合并,确保合并后的数组有序
3、重复进行第二步直到合并为一个数组位置
二、归并排序代码分析
#include <iostream>
using namespace std;
void Merge(int *arry,int L,int m,int R);//将数组合并
void Mergesort(int *arry,int L,int R);//归并排序
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin >>a[i];
}
Mergesort(a,0,n-1);
for(int i=0;i<n;i++){
cout<< a[i]<<" ";
}
return 0;
}
void Mergesort(int *arry,int L,int R)
{
int mid;
//当L>=R时结束递归
if(L>=R){
return ;
}
if(L<R){
mid=(L+R)/2;
Mergesort(arry,L,mid);//对左边进行归并排序
Mergesort(arry,mid+1,R);//对右边进行归并排序
Merge(arry,L,mid,R);//将左右两边的数组进行合并
}
}
void Merge(int *arry,int L,int m,int R)
{
int t,x,y;
t=x=L;
y=m+1;
int a[1000];
while(x<=m&&y<=R){
if(arry[x]<=arry[y]){
a[t++]=arry[x++];
}
else{
a[t++]=arry[y++];
}
}
while(x<=m){
a[t++]=arry[x++];
}
while(y<=R){
a[t++]=arry[y++];
}
for(int i=L;i<=R;i++){
arry[i]=a[i];
}
}