一、算法思想
归并排序用了分治的思想,把待排序的序列分割成两个数去比较大小,然后再合并排序后的序列得到总的有序序列。二、代码实现
#include<iostream>
using namespace std;
int a[1000000];
int b[1000000];
int c[1000000];
int n;
void mergerarray(int first,int mid,int last)
{
int i=first,j=mid+1;
int m=mid,n=last;
int k=0;
while(i<=m&&j<=n)
{
if(a[i]<a[j])
{
c[k++]=a[i++];
}
else
{
c[k++]=a[j++];
}
}
while(i<=m)
{
c[k++]=a[i++];
}
while(j<=n)
{
c[k++]=a[j++];
}
for(i=0;i<k;i++)
{
a[first+i]=c[i];
}
}
void mergersort(int first,int last)
{
if(first<last)
{
int mid=(first+last)/2;
mergersort(first,mid);
mergersort(mid+1,last);
mergerarray(first,mid,last);
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
mergersort(0,n-1);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}
三、算法分析
算法的时间复杂度最好最坏都是nlgn。是一种稳定(相同元素排序后的位置是否与原来保持一致)的排序算法。