package com.test.sort;
/**
* <Description> 归并排序:先递归再整合<br>
*
* @author liu.mingqing<br>
* @version 1.0<br>
* @taskId <br>
* @CreateDate 2017年2月4日 <br>
* @since V7.3<br>
* @see com.test.sort <br>
*/
public class MergeSort {
/**
* Description: <br>
*
* @author liu.mingqing<br>
* @taskId <br>
* @param args <br>
*/
public static void main(String[] args) {
Integer[] test = {305,65,7,90,120,110,8};
mergeSort(test,0,6);
System.out.println(test.toString());
}
public static <T extends Comparable<T>> void mergeSort(T[] data, int min, int max) {
if (min < max) {
int mid = (min+max)/2;
mergeSort(data, min, mid);
mergeSort(data,mid+1,max);
merge(data,min,mid,max);
}
}
/**
*
* Description: merge two sorted list into one<br>
*
* @author liu.mingqing<br>
* @taskId <br>
* @param data
* @param min
* @param mid
* @param max <br>
*/
@SuppressWarnings("unchecked")
private static <T extends Comparable<T>> void merge(T[] data, int min,int mid, int max) {
int first1 = min,last1 = mid;
int first2 = mid+1,last2 = max;
T[] temp = (T[]) new Comparable[data.length];
int index = first1;
while (first1 <= last1 && first2 <= last2) {
if (data[first1].compareTo(data[first2]) < 0){
temp[index] = data[first1];
index++;
first1++;
} else {
temp[index] = data[first2];
index++;
first2++;
}
}
while (first1 <= last1) {
temp[index] = data[first1];
index++;
first1++;
}
while (first2 <= last2) {
temp[index] = data[first2];
index++;
first2++;
}
for (index = min; index <= max; index++ ) {
data[index] = temp[index];
}
}
}