合并排序
											 程序代码:
程序代码://这个程序本来是合并排序的,但是输出的结果与预期的不符,哪位大神能够解释一下
#include <iostream.h>
#include <memory.h>
void merge(int A[],int p,int q,int r,int m);
void merge_sort(int A[],int n);
int main()
{
    int B[]={12,5,4,63,79,33,10,58,69,14};
    merge_sort(B,10);
    for(int i=0;i<10;i++)
        cout<<B[i]<<" ";
    cout<<endl;
    return 0;
}
void merge(int A[],int p,int q,int r)
{
    int* bp = new int[r-p+1];
    int i,j,k;
    i=p;
    j=q+1;
    k=0;
    while(i<=q&&j<=r)
    {
        if(A[i]<=A[j])
            bp[k++] = A[i++];
        else
            bp[k++] = A[j++];
    }
    if(i==q+1)
    {
        for(;j<=r;j++)
            bp[k++] = A[j++];
    }
    else
    {
        for(;i<=q;i++)
            bp[k++] = A[i++];
    }
    k=0;
    for(i=p;i<=r;i++)
        A[i++] = bp[k++];
    //cout<<A[i]<<endl;
    delete bp;
}
void merge_sort(int A[],int n)
{
    int s,i,t=1;
    while(t<n)
    {
        s=t; 
        t = 2*s; 
        i=0;   //s是合并前序列的大小,t是合并后序列的大小,每次合并元素的起始位置为i
        while(i+t<n)
        {   
            merge(A,i,i+s-1,i+t-1);
            i=i+t;
        }
        if(i+s<n)
            merge(A,i,i+s-1,n-1);
    }   
}										
					
	


 
											





 
	    

 
	




