java

位置:IT落伍者 >> java >> 浏览文章

用代码展示一下合并排序算法


发布日期:2021年05月03日
 
用代码展示一下合并排序算法

#include <iostreamh>

void Merge(int c[]int d[]int lint mint r)

{//合并c[l:m]和c[m+:r]到d[l:r]

int i=l

j=m+

k=l;

while((i<=m)&&(j<=r))

if(c[i]<=c[j]) d[k++]=c[i++];

else d[k++]=c[j++];

if(i>m)for(int q=j;q<=r;q++)

d[k++]=c[q];

else for(int q=i;q<=m;q++)

d[k++]=c[q];

}

void MergePass(int x[]int y[]int sint n)

{//合并大小为s的相邻子数组

int i=;

while(i<=n*s){

//合并大小为s的相邻段子数组

Merge(xyii+si+*s);

i=i+*s;

}

//剩余的元素个数少于s

if(i+s<n) Merge(xyii+sn);

else for(int j=i;j<=n;j++)

y[j]=x[j];

}

void MergeSort(int a[]int n)

{

int *b=new int [];

int s=;

while(s<n){

MergePass(absn);//合并到数组b

s+=s;

MergePass(basn);//合并到数组a

s+=s;

}

}

int main()

{

int t[];

cout<<&#;请输入数组:\n&#;;

cout<<&#;输入结束\n&#;;

int p=;

int g=;

while(g!=){

cin>>g;

if(g!=)

{   t[p]=g;

p++;

//g++;

}

}

/*for(int g=;g<;g++)

cin>>t[g];*/

MergeSort(tp);

for(int i=;i<p;i++)

{

cout<<t[i]<<&#;\n&#;;

}

return ;

}

               

上一篇:一道算法面试题的解题思路

下一篇:用递归算法判断数组a[N]是否为一个递增数组