算法思想:
算法将数组分为两个子数组,然后对每个子数组递归应用归并排序。
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] + " ");
}
}
原文:http://www.cnblogs.com/hansonzhe/p/3595577.html