Example #1
0
//The driving routine for merging leftist heaps
heapnode Merge(heapnode h1, heapnode h2){
	if(h1==NULL)
		return h2;
	if(h2==NULL)
		return h1;
	//To decide that which heap's root is smaller
	if(h1->num < h2->num)
		return Merge1(h1,h2);
	else
		return Merge1(h2,h1);
}
Example #2
0
// 合并左式堆的驱动函数
PriorityQueue Merge(PriorityQueue H1, PriorityQueue H2)
{
    if (H1 == NULL)
        return H2;
    if (H2 == NULL)
        return H1;
    // 以有较小的元素的堆为根
    if (H1->Element < H2->Element)
        return Merge1(H1, H2);
    else 
        return Merge1(H2, H1);
}
Example #3
0
/* START: fig6_26.txt */
PriorityQueue
Merge( PriorityQueue H1, PriorityQueue H2 )
{
    /* 1*/      if( H1 == NULL )
        /* 2*/          return H2;
    /* 3*/      if( H2 == NULL )
        /* 4*/          return H1;
    /* 5*/      if( H1->Element < H2->Element )
        /* 6*/          return Merge1( H1, H2 );
    else
        /* 7*/          return Merge1( H2, H1 );
}
Example #4
0
PriorityQueue Merge(PriorityQueue H1, PriorityQueue H2)
{
	if(H1 == NULL){
		return H2;
	}
	if(H2 == NULL){
		return H1;
	}
	if(H1->Element < H2->Element){
		return Merge1(H1, H2);
	}else{
		return Merge1(H2, H1);
	}
}
//非递归 
void Merge_Pass(int *A,int *TmpA,int n,int length)
{
	//length当前子序列的长度 
	int i,j;
	for(i=0;i<=n-2*length;i+=2*length) 
	{
		Merge1(A,TmpA,i,i+length,i+2*length-1);
	}
	if(i+length<n)//归并最后两个数列 
	{
		Merge1(A,TmpA,i,i+length,n-1);
	}
	else//归并最后一个数列 
	{
		for(j=i;j<n;j++)
		{
			TmpA[j]=A[j];
		}
	}
}
Example #6
0
void MSort(ElementType S[], ElementType TmpS[], long L, long RightEnd)
{
    long Center;
    if (L < RightEnd)
    {
        Center = (L + RightEnd) / 2;
        MSort(S, TmpS, L, Center);
        MSort(S, TmpS, Center + 1, RightEnd);
        Merge1(S, TmpS, L, Center + 1, RightEnd);
    }
}
Example #7
0
void Merge_pass(int A[],int TempA[],int N,int length)
{
    int i,j;
    for(i=0; i<=N-2*length; i+=2*length)
    {
        Merge1(A,TempA,i,i+length,i+2*length-1);
    }
    if(i+length<N)
    {
        Merge1(A,TempA,i,i+length,N-1);
    } else
    {
        for(j=i; j<N; j++)
        {
            TempA[j]=A[j];
        }
    }
    for(j=0; j<N; j++)
    {
        A[j]=TempA[j];
    }

}