//合并排序
#include <iostream>
using namespace std;
int a[105],b[105];
void Merge(int c[],int d[],int l,int m,int r);
void MergeSort(int a[],int left,int right);
int main()
{
int n;
cin>>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]<<" ";
}
cout<<endl;
}
void Merge(int c[],int d[],int l,int m,int r)
{ //合并c[l:m]和c[m+1:r]到d[l:r]
int i = l,j = m + 1,k = l;
while((i<=m)&&(j<=r))
{//从左到右依次比较,较小值赋给d[]
if(c[i]<=c[j])
{
d[k++] = c[i++];
}
else
{
d[k++] = c[j++];
}
}
if(i>m)
{ //左侧已赋值完,将右侧剩余部分赋给d[]
for(int q=j; q<=r; q++)
{
d[k++] = c[q];
}
}
else
{ //右侧已赋值完,将左侧剩余部分赋给d[]
for(int q=i; q<=m; q++)
{
d[k++] = c[q];
}
}
}
void MergeSort(int a[],int left,int right)
{
if(left<right)
{
int i = (left + right)/2;
MergeSort(a,left,i);
MergeSort(a,i+1,right);
Merge(a,b,left,i,right);//合并到数组b
//复制回数组a
for(int g=left; g<=right; g++)
{
a[g] = b[g];
}
}
}
合并排序
最新推荐文章于 2019-10-21 16:10:01 发布