package sort;
public class MergeSort {
private static int[] numbersCopy ;
public static void sort(int[] numbers){
numbersCopy = new int[numbers.length];
sort(numbers,0,numbers.length-1);
}
private static void sort(int[] numbers, int start, int end){
if (end<=start){
return;
}
int mid = start + (end-start)/2;
sort(numbers,start,mid);
sort(numbers,mid+1,end);
merge(numbers,start,end,mid);
}
public static void merge(int[] numbers, int start, int end, int mid){
int start1 = start;
int start2 = mid+1;
for (int k=start; k<=end; k++){
numbersCopy[k] = numbers[k];
}
for (int k=start; k<=end; k++){
if (start1>mid){
numbers[k] = numbersCopy[start2];
start2++;
}else if (start2>end){
numbers[k] = numbersCopy[start1];
start1++;
}else if (numbersCopy[start2]<numbersCopy[start1]){
numbers[k] = numbersCopy[start2];
start2++;
}else {
numbers[k] = numbersCopy[start1];
start1++;
}
}
}
public static void main(String[] args) {
int[] a = {1,3,1,4,5,6,1,1,1,1};
MergeSort.sort(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
}
}