package test;
public class combinSort {
public int[] sort(int[] arr) {
if (arr.length > 2) {
int[][] splitarr = splitArr(arr);
return combinArr(sort(splitarr[0]), sort(splitarr[1]));
} else if (arr.length == 2) {
return exchangeArr(arr);
} else {
return arr;
}
}
private int[] exchangeArr(int[] arr) {
if (arr[0] > arr[1]) {
int temp = arr[1];
arr[1] = arr[0];
arr[0] = temp;
}
return arr;
}
private int[][] splitArr(int[] arr) {
int size1 = arr.length / 2;
int size2 = arr.length - size1;
int[] arr1 = new int[size1];
for (int i = 0; i < size1; i++) {
arr1[i] = arr[i];
}
int[] arr2 = new int[size2];
for (int i = 0; i < size2; i++) {
arr2[i] = arr[size1 + i];
}
System.out.println("arr1:");
ArrCreater.printArr(arr1);
System.out.println("arr2:");
ArrCreater.printArr(arr2);
return new int[][] { arr1, arr2 };
}
public int[] combinArr(int arr1[], int[] arr2) {
int[] result = new int[arr1.length + arr2.length];
int index1 = 0, index2 = 0;
for (int i = 0; i < result.length; i++) {
if (index1 < arr1.length && index2 < arr2.length) {
if (arr1[index1] < arr2[index2]) {
result[i] = arr1[index1];
index1++;
} else {
result[i] = arr2[index2];
index2++;
}
} else {
if (index1 >= arr1.length) {
result[i] = arr2[index2];
index2++;
} else
if (index2 >= arr2.length) {
result[i] = arr1[index1];
index1++;
}
}
}
return result;
}
public static void main(String args[]) {
int[] arr = ArrCreater.create(13);
System.out.println("#############origin:");
ArrCreater.printArr(arr);
combinSort c = new combinSort();
arr = c.sort(arr);
System.out.println("#############result:");
ArrCreater.printArr(arr);
}
}