Merge Sort
public class MergeSort {
public int[] mergerSort(int[] data){
if(data == null){
return null;
}
int len = data.length;
if(len <= 1){
return data;
}
int left[] = new int[len/2];
int right[] = new int[len - len/2];
//left = Arrays.copyOfRange(data, 0, data.legnth / 2 - 1)
//right = Arrays.copyOfRange(data, data.length / 2, data.length - 1);
System.arraycopy(data, 0, left, 0, len/2);
System.arraycopy(data, len/2, right, 0, len - len/2);
left = mergerSort(left);
right = mergerSort(right);
return merge(left, right);
}
public int[] merge(int[] left, int[] right){
int len = left.length + right.length;
int[] ret = new int[len];
int leftPoint = 0;
int rightPoint = 0;
int cur = 0;
while(leftPoint < left.length && rightPoint < right.length){
if(left[leftPoint] < right[rightPoint]){
ret[cur++] = left[leftPoint++];
}else {
ret[cur++] = right[rightPoint++];
}
}
if(leftPoint >= left.length){
while (rightPoint < right.length){
ret[cur++] = right[rightPoint++];
}
}else{
while (leftPoint < left.length){
ret[cur++] = left[leftPoint++];
}
}
return ret;
}
}