import java.util.Arrays;
public class Sort {
int[] sort(int[] arr)
{
if (arr.length > 1) {
int pivot = arr[0]; //This pivot can change to get faster results
int[] less = new int[arr.length];
int[] pivotList = new int[arr.length];
int[] more = new int[arr.length];
int indexLess = 0;
int indexPivot = 0;
int indexMore = 0;
// Partition
for (int i = 0; i< arr.length; i++) {
int value = arr[i];
if (value < pivot) {
less[indexLess] = value;
indexLess++;
}
if (value > pivot) { // else if (value > pivot)
more[indexMore] = value;
indexMore++;
}
if (value == pivot) { //else
pivotList[indexPivot] = value;
indexPivot++;
}
}
// Recursively sort sublists
less = sort(Arrays.copyOf(less,indexLess));
more = sort(Arrays.copyOf(more,indexMore));
// Concatenate results
int[] ret = new int[arr.length];
for (int i = 0; i < indexLess; i++) {
ret[i] = less[i];
}
for (int i = 0; i < indexPivot; i++) {
ret[indexLess+i] = pivotList[i];
}
for (int i = 0; i < indexMore; i++) {
ret[indexLess+indexPivot+i] = more[i];
}
return ret;
}
return arr;
}
}