合并排序算法是用分治策略实现对n个元素进行排序的算法。
基本思想:将待排序元素分为大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排序好的子集合合并成要求的排好序的集合。
算法如下:
template<class Type>
void MergeSort(Type s[],int t[],int b,int e){
if(b<e){
int m;
m=(b+e)/2;
MergeSort(s,t,b,m);
MergeSort(s,t,m+1,e);
Merge(s,t,b,m,e);
}
}
template<class Type>
void Merge(type s[],type t[],int b,int m,int e){
int i=b;
int j=m+1;
int k=0;
while(i<=m&&j<=e){
if(s[i]<=s[j]){
t[k++]=s[i++];
}else{
t[k++]=s[j++];
}
}
while(i<=m){
t[k++]=s[i++];
}
while(j<=e){
t[k++]=s[j++];
}
for(int n=0;n<k;n++){
s[b+n]=t[n];
}
}
下面是对于java方式的代码实现:
public class Test {
public static void main(String[] args){
int a[]={0,3,2,7,6,8};
int temp[]=new int[6];
MergeSort(a,temp,0,5);
for(int i=0;i<a.length;i++){
System.out.print(a[i]);
System.out.print("\t");
}
}
public static void Merge(int s[],int t[],int b,int m,int e){
int i=b;
int j=m+1;
int k=0;
while(i<=m&&j<=e){
if(s[i]<=s[j]){
t[k++]=s[i++];
}else{
t[k++]=s[j++];
}
}
while(i<=m){
t[k++]=s[i++];
}
while(j<=e){
t[k++]=s[j++];
}
for(int i1=0;i1<k;i1++){
s[b+i1]=t[i1];
}
}
public static void MergeSort(int s[],int t[],int b,int e){
if(b<e){
int m;
m=(b+e)/2;
MergeSort(s,t,b,m);
MergeSort(s,t,m+1,e);
Merge(s,t,b,m,e);
}
}
}