/*
数组ary的m个元素,ary[p]~ary[q],ary[q+1]~ary[r]已按曾序排序
使得ary[p]~ary[r]按曾序排列
*/
void CLibrary::merge(int ary[],int p,int q,int r,int m)
{
int *bp=new int[m];
int i=p,j=q+1,k=0;
while((i<=q) && (j<=r))
{
if(ary[i]<ary[j])
bp[k++]=ary[i++];
else
bp[k++]=ary[j++];
}
if(i<=q)
{
for(;i<=q;i++)
bp[k++]=ary[i];
}
else
{
for(;j<=r;j++)
bp[k++]=ary[j];
}
k=0;
for(i=p;i<=r;i++)
ary[i]=bp[k++];
delete []bp;
bp=NULL;
}
/*
采用合并排序算法对数组ary进行排序
需调用merge()函数
*/
void CSort::merge_sort(int ary[],int n)
{
int i=0,s=0,k=1; //s:合并前序列的大小,k:合并后序列的大小
CLibrary m_Library;
while(k<n)
{
i=0;
s=k;
k=2*s;
while(i+k<n)
{
m_Library.merge(ary,i,i+s-1,i+k-1,k);
i=i+k;
}
if(i+s<n)
m_Library.merge(ary,i,i+s-1,n-1,n-i);
}
}
int main()
{
////////////////////////////////////////////
////// 用合并排序算法对数组排序 ///////////
int ary[12]={8,5,3,9,11,6,4,1,10,7,2};
// int ary[12]={2,3,1,5,7,2,5,3,8,9,6};
for(int i=0;i<11;i++)
cout<<ary[i]<<" ";
cout<<endl;
CSort m_Sort;
m_Sort.merge_sort(ary,11);
cout<<"the sort result is "<<endl;
for(int i=0;i<11;i++)
cout<<ary[i]<<" ";
getchar();
return 0;
}