您的位置:首页 > 其它

合并排序

2013-09-27 22:40 232 查看
合并排序就是通过分治策略对n个元素进行排序,其算法复杂度为θ(nlg(n)),比插入排序复杂度要低,下面讲解两种排序方式的实现.

input :a[10]={7,3,6,8,4,9,2,1,12,5}

output :依照从小到大的顺序输出.

首先给出合并排序的思想,是假设两段已经排好了序,再对其合并得出最终的序列的过程.其中的关键是在于合并过程,就是不断的套用子程序。

/*分割*/
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);
}


/*合并*/
void Merge(int a[],int b[],int p,int q,int r)
『
int n1=q-p+1;
int n2=r-p;
int L[n1+1];int R[n2+1];
for (int i=1,i<=n1,i++)
L[i]=a[p=i-1];
for (int j=1,j<=n2,j++)
R[j]=a[q+j];
int i=1,j=1;
for(int k=p,k<=r,k++)
{ if(L[i]<=R[j];
b[k]=L[i];i=i+1;
else b[k]=R[i];j=j+1;
}


而插入排序的思想则是在一段序列a[1...j-1]中插入一个a[j]的值,相应的代码可以写成:

/*输入a
*/
for (int j=1,j<n,j++)
{ int key=a[j];}
for (i=j-1,i>=0,i--)
{ if (key<a[i])
{a[i+1]=a[i];}
a[i+1]=key;
}


插入的思想很好理解,就是将a[j]与前面的值进行比较,算法复杂度为θ(n2).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: