二路递归式归并排序(基本上分为两个版本,此篇为其中一个版本):
举例:对下面的七个数归并排序
1, 5, 1, 7, 11, 10, 9
程序按照下图运行。
程序中需要注意的几个关键语句:
merge(b,a,begin,end,mid);//传过去的顺序是b,a,
而函数merge(int* a,int* b,int begin,int end,int mid)
因为: mergesort中的if语句
if(begin==end)
{
b[begin]=a[begin];
}
b中存的是要进行排序的数int k=i;//在函数merge( )中
for(int l=0;l<7;l++)//merge( )中
a[l]=b[l];
1. 分,mergesort(a,b,begin,mid);
mergesort(a,b,mid+1,end);
2. 治(排序、合并) merge(b,a,begin,end,mid);
# include< iostream>
using namespace std;
void merge(int* a,int* b,int begin,int end,int mid)
{
int i=begin;
int j=mid+1;
int k=i;
while(i