二路归并排序算法的实现(下面代码好像不通,请高手指正)
#include<iostream>using namespace std;
////
int b[7];
void merge(int a[],int m, int n, int l);//将两个与排序数列组合成有序数列
void merge_sort(int a[],int m, int n);//递归的排序数列
////////////////
int main()
{
int a[7]={1,2,3,4,5,6,7};
merge_sort(a,0,6);
cout<<endl;
for(int i=0; i<7; i++)
cout<<b[i]<<'\t';
cout<<endl;
//////////////////////
return 0;
}
///
void merge_sort(int a[], int m, int n)
{
int q;
if(m<n)
{
q=(m+n)/2;
merge_sort(a,m,q);//当m=n时,此函数调用结束,而没有机会执行下面的的函数,
//但是,目的要求要实现 在上面函数调用结束后再继续执行下面的函数,那么如何来改进?
merge_sort(a,q+1,n);
merge(a,m,q,n);
}
//////////////////////
}
//////////////////////
//////////////////////
void merge(int a[],int m, int n, int l)
{
int i, j, k;
////////////////////
k=m;
i=m;
j=n+1;
//////////////
while( i<=n && j<=l )
{
if( a[i]<=a[j] )
{
b[k]=a[i];
i++;
}
else
{
b[k]=a[j];
j++;
}
}
///////////////
while( i<=n)
{
b[k]=a[i];
i++; k++;
}
while( j<=l)
{
b[k]=a[j];
k++;
j++;
}
}