应用了递归的思想,将无序序列分解为1个1个的,然后通过两两合并。
难点在透彻的理解递归思想:
package com.wjy.renren;
import java.util.Arrays;
public class MergeSort {
public static void main(String args[]){
int[] array={1,3,2,6,9,5,3,8};
int[] result = mergeSort(array);
System.out.println(Arrays.toString(result));
}
private static int[] mergeSort(int[] array){
if(array.length==1){
return array;
}
else{
int lArray[]=new int[array.length/2];
int rArray[]=new int[array.length-array.length/2];
for(int i=0;i<array.length/2;i++){
lArray[i]=array[i];
}
for(int i=0;i<array.length-array.length/2;i++){
rArray[i]=array[array.length/2+i];
}
int sortedLArray[]=mergeSort(lArray);
int sortedRArray[]=mergeSort(rArray);
int result[]=merge(sortedLArray, sortedRArray);
return result;
}
}
//将lArray[]和rArray[]合并排序为一个大数组。
private static int[] merge(int[] lArray,int[] rArray){
int posA=0;
int posB=0;
int[] result=new int[lArray.length+rArray.length];
int resultPos=0;
while(posA<lArray.length&&posB<rArray.length){
if(lArray[posA]<rArray[posB]){
result[resultPos++]=lArray[posA++];
}else{
result[resultPos++]=rArray[posB++];
}
}
while(posA<lArray.length){
result[resultPos++]=lArray[posA++];
}
while(posB<rArray.length){
result[resultPos++]=rArray[posB++];
}
return result;
}
}