合并排序算法是分治算法策略实现对n个元素进行排序的算法。其基本思想是:将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。合并排序算法递归地描述如下:
程序:
import java.util.Scanner;
public class Merge_sort {
int array[];
public Merge_sort(){
int n;
Scanner sc=new Scanner(System.in);
System.out.print("输入数值元素个数:");
n=sc.nextInt();
array=new int[n];
System.out.print("输入数值元素:");
for(int i=0;i<n;i++)
array[i]=sc.nextInt();
sc.close();
}
public void merge(int c[],int l,int m,int r){
int i=l,j=m+1,k=l, q;
int d[]=new int[c.length];
while(i<=m&&j<=r)
if(c[i]<=c[j])
d[k++]=c[i++];
else
d[k++]=c[j++];
if(i>m)
for(q=j;q<=r;q++)
d[k++]=c[q];
else
for(q=i;q<=m;q++)
d[k++]=c[q];
for(q=l;q<=r;q++)
c[q]=d[q];
}
public void mergePass(int x[],int s){
int i=0;
while(i<=x.length-2*s){
merge(x,i,i+s-1,i+2*s-1);
i=i+2*s;
}
if(i+s<x.length)
merge(x,i,i+s-1,x.length-1);
}
public void mergeSort(int a[]){
int s=1;
while(s<a.length){
mergePass(a,s);
s+=s;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Merge_sort t=new Merge_sort();
t.mergeSort(t.array);
for(int i=0;i<t.array.length;i++){
System.out.print(t.array[i]+" ");
}
}
}
最终代码实现结果: