- 归并排序是分治思想的一种体现,将一个数组不断划分缩小,最后在合并统一
public static <E extends Comparable<? super E>> void mergeSort(E[] array) {
E[] temp = (E[])new Comparable[array.length];
mergeSort(array,temp,0,array.length-1);
}
/**
* 使用递归,不断调用自己,来达到缩小范围的目的,之后在合并,层层推进
* @param <E>
* @param array
* @param temp
* @param left
* @param right
*/
public static <E extends Comparable<? super E>> void mergeSort(E[] array,E[] temp,int left,int right) {
if(left==right)
return;
int center = (left+right)/2;
mergeSort(array, temp, left, center);
mergeSort(array, temp, center+1, right);
merge(array, temp,left,center,right);
}
private static <E extends Comparable<? super E>> void merge(E[] array,E[] temp,int begin,int center,int end) {
int left = begin;
int right = center+1;
int tempPos = begin;
while(left<=center&&right<=end) {
if(array[left].compareTo(array[right])<=0) {
temp[tempPos++] = array[left++];
}
if(array[left].compareTo(array[right])>0) {
temp[tempPos++] = array[right++];
}
}
while(left<=center)
temp[tempPos++] = array[left++];
while(right<=end)
temp[tempPos++] = array[right++];
for(int i=tempPos-1;i>=begin;i--)
array[i] = temp[i];
}