![]() |
#2
zhu2240392012-10-16 23:17
|

//这个程序本来是合并排序的,但是输出的结果与预期的不符,哪位大神能够解释一下
#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);
}
}
#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);
}
}