Mọi người giúp e bài này với ạ, e viết bị lỗi ! Sắp xếp merge sort theo quy hoạch động. E viết theo giải thuật sắp xếp hai đường trực tiếp!
#include <iostream>
using namespace std;
void xuat( int a[], int n)
{
int i;
for(i = 0; i <n; i++)
{
cout<<" "<<a[i];
}
}
int MERGE(int A[], int r, int LBA,int B[], int s, int LBB, int C[], int LBC )
{
//1.
int i = LBA;
int j = LBB;
int k = LBC;
int UBA = LBA + r -1;
int UBB = LBB + s -1;
//2.
// cout<<"test";
while( i <=UBA && j <=UBB)
{
//3.
if( A[i] < A[j])
{
C[k] = A[i];
i++;
k++;
}
else
{
C[k] = B[j];
j++;
k++;
}
}
//5.
if( i>UBA)
{
for (int t = 0; t <= UBB-j;t++)
{
C[k+t] = B[j+t];
}
}
else
{
for (int t = 0; t <= UBA-i;t++)
{
C[k+t] = A[i+t];
}
}
// cout<<C[k];
}
int MPASS (int K[],int n, int l, int X[])
{
//1.
int Q = n/(2*l);
// cout<<"Q= "<<Q<<endl;
int S = 2*l*Q;
// cout<<"S= "<<S<<endl;
int R = n - S;
// cout<<"R= "<<R<<endl;
//2.
for ( int j =1; j <=Q; j++)
{
int LB = 1+( 2*j -2) * l;
// cout<<" "<<LB;
MERGE(K,1,LB,K,1,LB+1,X,LB);
// xuat(K,n);
// cout<<endl;
}
//3.
if(R <=l)
{
for ( int j =1; j <=R; j++)
{
X[S+j] = K[S+j];
// cout<<X[j];
}
}
//4.
else MERGE(K,1,S+1,K,R-l,1+S+1,X,S+l);
}
int STRAIGHT_SORT(int K[], int n)
{
int l=1 ; int X[50];
while ( l <n )
{
MPASS(K,n,l,X);
MPASS(X,n,2*l,K);
l = 4*l;
}
}
int main()
{
int l;int n = 10;
int C[10],X[10];
int K[10] = {42,23,74,11,65,58,94,36,99,87};
cout<<"day ban dau: ";
xuat(K,n);
cout<<endl;
// MPASS(K,n,l,X);
STRAIGHT_SORT(K,n);
cout<<"day sau khi sap xep: ";
xuat(K,n);
}