首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

计算机程序设计艺术-归并排序

2012-12-28 
计算机程序设计艺术-----归并排序!--[endif]--!--[endif]--!--[endif]--!--[endif]--!--[endif]-

计算机程序设计艺术-----归并排序

<!--[endif]-->

<!--[endif]-->

<!--[endif]-->

<!--[endif]-->

<!--[endif]-->

???? private void Merge(int seq1[],int start1,int end1,int[]seq2,int start2,int end2 ){

??? ?int [] mergeSeq=new int [end1+end2-start1-start2];

??? ?int i=0;

??? ?while(start1<=end1||start2<=end1){

??? ??? ?if(start1>end1||seq1[start1]>seq2[start2]){

??? ??????? ?mergeSeq[i]=seq2[start2];

??? ??????? ?start2++;

??? ??????? ?i++;

??? ??? ?}

??? ??? ?else if(start2>end2 ||seq1[start1]<=seq2[start2]){

??? ??????? ?mergeSeq[i]=seq1[start1];

??? ??????? ?mergeSeq[i]=seq1[start1];

??? ??????? ?start1++;

??? ??????? ?i++;

??? ??? ?}

??? ?}

第三次合并之后????????[13???? 27?????38??? 49????65????? 76??? 97]

?

?

代码实现:

void Merge(SeqListR,int low,int m,int high)
??? {//将两个有序的子文件R[low..m)和R[m+1..high]归并成一个有序的
???? //子文件R[low..high]
???? int i=low,j=m+1,p=0; //置初始值
???? RecType *R1; //R1是局部向量,若p定义为此类型指针速度更快
???? R1=(ReeType *)malloc((high-low+1)*sizeof(RecType));
???? if(! R1) //申请空间失败
?????? Error("Insufficient memoryavailable!");
???? while(i<=m&&j<=high) //两子文件非空时取其小者输出到R1[p]上
?????? R1[p++]=(R[i].key<=R[j].key)?R[i++]:R[j++];
???? while(i<=m) //若第1个子文件非空,则复制剩余记录到R1中
?????? R1[p++]=R[i++];
???? while(j<=high) //若第2个子文件非空,则复制剩余记录到R1中
?????? R1[p++]=R[j++];
???? for(p=0,i=low;i<=high;p++,i++)
?????? R[i]=R1[p];//归并完成后将结果复制回R[low..high]
??? } //Merge

热点排行