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