用盗来的图做下解释:
上图就是merge sort的图解过程,可以看到整个过程使用的是分而治之的思想,把一组数分为二等分,四等分,八等份。。。直到无法分割为止,再两两比较拼接。
需要两个函数:
<1>分开并拼接的函数
<2>比较大小并按照顺序换位置的函数
看代码:
# include<iostream>
using namespace std;
void Merge_sort(int a[],int temp[],int begin,int mid,int end)
{
int s=begin;
int b=begin,m=mid+1;
while(b!=mid+1&&m!=end+1)
{
if(a[b]<a[m])
{
temp[s++]=a[b];
b++;
}
else
{
temp[s++]=a[m];
m++;
}
}
while(m!=end+1)
{
temp[s++]=a[m++];
}
while(b!=mid+1)
{
temp[s++]=a[b++];
}
for(int i=begin;i<end+1;i++)
{
a[i]=temp[i];
}
}
void Divide(int a[],int temp[],int low,int high)
{
if(low<high)
{
int mid=(low+high)/2;
Divide(a,temp,low,mid);
Divide(a,temp,mid+1,high);
Merge_sort(a,temp,low,mid,high);
}
else
return;
}
void main()
{
int a[10]={11,21,13,41,10,9,8,56,23,21};
int temp[10];
Divide(a,temp,0,9);
for(int i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
}