归并排序
归并排序详解
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
在讲归并排序前,先看一看合并排序吧。
合并排序顾名思义就是合并,将讲两个数组合并到一个数组的排序方式。简单的讲就是对两个已经进行排序的数组进行合并到第三个数组。比较两个数组的元素的大小,将小的一个录入第三个数组,一次一次比较。当一个数组没有元素后,直接将另一个数组直接移到第三个素组就行了。
代码如下:
void memerarray(int a[],int n,int b[],int m,int c[])
{
int i=0,j=0,k=0;
while(i<n&&j<m)
{
if(a[i]<b[j])
c[k++]=a[i++];
else
c[k++]=b[j++];
}
while(i<n)
c[k++]=a[i++];
while(j<m)
c[k++]=b[j++];
}
合并排序排序是在已知有序序列的情况下进行合并,当序列无序呢?
接下来进行归并排序,去解决这个问题。
void memerarry(int a[],int first,int mid,int last,int b[])
{
int i=first,j=mid+1;
int n=mid,m=last;
int k=0;
while(i<=n&&j<=m)
{
if(a[i]<a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
while(i<=n)
{
b[k++]=a[i++];
}
while(j<=m)
b[k++]=a[j++];
for(int i=0;i<k;i++)
a[first+i]=b[i];
}
void mergesort(int a[],int first,int last,int b[])
{
if(first<last)
{
int mid=(first+last)/2;
mergesort(a,first,mid,b);
mergesort(a,mid+1,last,b);
memerarry(a,first,mid,last,b);
}
}
归并排序效率是比较高的。