歸併排序:(MERGE-SORT)是創建在歸併操做上的一種有效的排序算法,該算法是採用分治法(Divide and Conquer)的一個很是典型的應用。將已有序的子序列合併,獲得徹底有序的序列;即先使每一個子序列有序,再使子序列段間有序。若將兩個有序表合併成一個有序表,稱爲二路歸併。java
測試代碼:算法
public class Myguibing {
//排序函數
public static void merge(int[]a,int first,int mid,int last,int[]x)
{
int i=first;
int m=mid;
int j=mid+1;
int n=last;
int xi=0;//暫時存放數組
while(i<=m&&j<=n)
{
if(a[i]<=a[j])
x[xi++]=a[i++];
else
x[xi++]=a[j++];
}
while(i<=m)x[xi++]=a[i++];
while(j<=n)x[xi++]=a[j++];
for(i=0;i<xi;i++) a[first+i]=x[i];
}
//遞歸的把數組劃分爲兩個子數組,一直遞歸到數組中只有一個元素
static void diguisort(int a[],int first,int last,int xi[])
{
if(first<last)//設置遞歸出口
{
int mid=(first+last)/2;
diguisort(a,first,mid,xi);//左邊
diguisort(a,mid+1,last,xi);//右邊
merge(a,first,mid,last,xi);//調用歸併排序函數,兩個有序數組排序import java.util.Scanner;
}
}
public void sort(int[] a) {
int n=a.length;
int[] b=new int[n];
diguisort(a, 0, n-1, b);
}
public static void main(String[] args) {
int[] a= {10,9,8,35,6,39,47,3};
int[] b= {12,39,83,325,62,392,417,23};
Myguibing p1=new Myguibing();
p1.sort(a);
p1.sort(b);
System.out.println("輸入數組經排序後爲:");
for (int i : b)
{
System.out.print(i+" ");
}
}數組