算法思想:
算法将数组分为两个子数组,然后对每个子数组递归应用归并排序。
package introjava;
public class MergeSort {
public static void mergeSort(int [] list){
if(list.length > 1){ //这是递归跳出的条件,一定要记住!!!
int firstHalfLen = list.length / 2;
int [] firstHalf = new int[firstHalfLen];
System.arraycopy(list, 0, firstHalf, 0, firstHalfLen);
mergeSort(firstHalf);
int []secondHalf = new int [list.length - firstHalfLen];
System.arraycopy(list, firstHalfLen, secondHalf, 0, list.length - firstHalfLen);
mergeSort(secondHalf);
int [] temp = merge(firstHalf, secondHalf);
System.arraycopy(temp, 0, list, 0, list.length);
}
}
public static int [] merge(int [] list1, int [] list2){
int [] temp = new int [list1.length + list2.length];
int current1 = 0;
int current2 = 0;
int current3 = 0;
while(current1 < list1.length && current2 < list2.length){
if(list1[current1] < list2[current2])
temp[current3++] = list1[current1++];
else
temp[current3++] = list2[current2++];
}
while(current1 < list1.length)
temp[current3++] = list1[current1++];
while(current2 < list2.length)
temp[current3++] = list2[current2++];
return temp;
}
public static void main(String []args){
int [] list = {2, 3, 2, 5, 6, 1, -2, 3, 14, 12};
mergeSort(list);
for(int i = 0 ; i < list.length; i++)
System.out.print(list[i] + " ");
}
}