正在加载图片...
串行多路归并算法* multimerge(int *datal, int*ind, int*data, int*iter, int data2 i=datal[1++]: SumIT) if(datal[Pdatal (m) Int 1, j,n, data20datal m++] else data20Fdatal [-+-+ for(=0< SumIO;计++) if (ind[o f(<r1)ind[=0, if(1) or(i=0≤j计1<=+2) merge( &(datal n ) indo ind[+l], &(data D); n + indi if(n for(F0<ind-]计+) merge(int*datal, int sl, int s2, int*data2) m=sI for(=0<s1+s2;计++)10 } /*串行多路归并算法*/ multimerge(int *data1,int *ind,int *data,int *iter,int SumID) { int i,j,n; j = 0; for (i=0;i<SumID;i++) if (ind[i]>0) { ind[j++] = ind[i]; if (j<i+1) ind[i] = 0; } if ( j>1 ) { n = 0; for (i =0;i<j,i+1<j;i=i+2) { merge(&(data1[n]),ind[i], ind[i+1],&(data[n])); ind[i] += ind[i+1]; ind[i+1] = 0; n += ind[i]; } if (j%2==1 ) for (i=0;i<ind[j-1];i++) data[n++]=data1[n]; (*iter)++; multimerge(data,ind,data1,iter, SumID); } } merge(int *data1,int s1,int s2,int *data2) { int i,l,m; l = 0; m = s1; for (i=0;i<s1+s2;i++) { if (l==s1) data2[i]=data1[m++]; else if (m==s2+s1) data2[i]=data1[l++]; else if (data1[l]>data1[m]) data2[i]=data1[m++]; else data2[i]=data1[l++]; } }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有