merging sort(迭代取代递归)

来源:互联网 发布:无主之地mac汉化补丁 编辑:程序博客网 时间:2024/06/05 10:03
#include <stdio.h>void merge(int sr[],int tr[],int i,int m,int t){int j,k,l;for(k=i,j=m+1;i<=m && j<=t;k++){if(sr[i]<sr[j]){tr[k]=sr[i++];}else{tr[k]=sr[j++];}}if(i<=m){for(l=0;l<=m-i;l++){tr[k+l]=sr[i+l];}}if(j<=t){for(l=0;l<=t-j;l++){tr[k+l]=sr[j+l]; }}} void merpass(int sr[],int tr[],int s,int t){    int i=1;    int j;    while(i<=t-2*s+1){    merge(sr,tr,i,i+s-1,i+2*s-1);    i=i+2*s;    }    if(i<t-s+1)merge(sr,tr,i,i+s-1,t);else{for(j=i;j<=t;j++){tr[j]=sr[j];}}}void mersort(int sr[],int tr[],int length){int k=1;while(k<length){merpass(sr,tr,k,length);k=2*k;merpass(tr,sr,k,length);k=2*k; }}int main(){int a[100],b[100],i,m;scanf("%d",&m);for(i=1;i<=m;i++){scanf("%d",&a[i]);} mersort(a,b,m);for(i=1;i<=m;i++){printf("%d ",a[i]);} return 0;}

0 0
原创粉丝点击