1.原理
Divide: 把数组分成两个子序列
Conquer: 分别对每个 子序列进行排序
Combin: 把排好序的两个子序列进行合并
2.代码:
void sort (int s[],int l,int r)
{
if ( l < r)
{
int mid = ( l+ r )/2; //把数组分成两个子序列
sort(s,l,mid); //分别对两个子序列排序
sort(s,mid+1,r);
merge_sort(s,l,mid,r); //合并两个已经排好序的子序列
}
}
void merge_sort(int a[],int start,int min,int end)
{
int len1 = min-start+1;
int len2 = end-min;
int arry1[] = new int [len1];
int arry2[] = new int [len2];
for(int i=1;i<=len1;i++)
arry1[i-1] = a[start+i-1];
for(int i=1;i<=len2;i++)
arry2[i-1] = a[min+i];
int i=0,j=0;
int k=start;
while(k<=end&&i<len1&&j<len2){
if(arry1[i] <= arry2[j])
a[k++] = arry1[i++];
else
a[k++] = arry2[j++];
}
while(i<len1)
a[k++] = arry1[i++];
while(j<len2)
a[k++] = arry2[j++];
}
}