合并排序
算法介紹:
合并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法 的一個非常典型的應用。
合并排序法是將兩個(或兩個以上)有序表合并成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然后再把有序子序列合并為整體有序序列。
將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為2-路歸并。合并排序也叫歸并排序。
public class MergingRank {
/**
* @param args
*/
public static void main(String[] args) {
int[] A={10,9,8,7,6,3,6,5,3,4,5,6,2,34,12,52}; //初始數組
MergingRank Merg=new MergingRank();
Merg. MergeSort(A);
}
public void MergeSort(int[] A){ //分治法,分成兩部分進行排序
int[] B=new int[A.length/2+1];
int[] C=new int[A.length/2+1];
if(A.length>0){
for(int i=0;i<(A.length/2)-1;i++){
B[i]=A[i];
}
int n=1;
for(int j=(A.length/2);j<A.length;j++){
C[n]=A[j];
n++;
}
MergeSort(B); //遞歸調用
MergeSort(C);
Merging(B,C,A);
}
}
public void Merging(int[] B,int[] C,int[] A){ //排序算法
int i=0,j=0,k=0;
while((i<B.length)&&(j<C.length)){
if (B[i]<=C[j]){
A[k]=B[j];
i++;
}
else{
A[k]=C[j];
j++;
}
};
if(i==B.length){
for(int m=j;m<C.length;m++){
A[k]=C[m];
k++;
}
}
else {
for(int n=i;n<B.length;n++){
A[k]=B[n];
k++;
}
}
}
}