Métodos de ordenação em java
public class APS {
private static final Random random = new Random(); private static final int RANDOM_INT_RANGE = 9999;
private static int[] randomArray(int size) {
// Fazendo o array aleatório final int[] arr = new int[size]; for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(RANDOM_INT_RANGE); } return arr;
}
// quicksort - chamada private static void sort(int[] arr) { if (arr.length > 0) sortInPlace(arr, 0, arr.length - 1);
}
// quicksort otimizado private static void sort2(int[] arr) { if (arr.length > 0) sortInPlace2(arr, 0, arr.length - 1);
}
//quicksort algoritmo private static void sortInPlace(int[] arr, int inicio, int fim) { if (inicio >= fim) return; // ordenado
final int range = fim - inicio + 1; int pivot = random.nextInt(range) + inicio;
int newPivot = partition(arr, inicio, fim, pivot);
sortInPlace(arr, inicio, newPivot - 1); sortInPlace(arr, newPivot + 1, fim);
}
//quicksort otimizado private static void sortInPlace2(int[] arr, int inicio, int fim) {
boolean insertionSortCalled = false;
int size = fim - inicio + 1; if (size < 10 && !insertionSortCalled) { //se o subvetor(ou vetor) tiver menos que 10 elementos ele ordena pelo método de inserçã insertionSortCalled = true; insertionSort(arr, 0, arr.length - 1); }
if (inicio >= fim) return; // sorted
final int range = fim - inicio + 1; int pivot = random.nextInt(range) + inicio;
int newPivot = partition(arr, inicio, fim, pivot);
sortInPlace(arr, inicio, newPivot - 1); sortInPlace(arr, newPivot + 1, fim);
} public static void insertionSort(int[] arr, int inicio, int fim) { int in, out;
for (out = inicio + 1; out inicio && arr[in - 1] >= temp) { arr[in] =