Ordenamiento: QuickSort, BubbleSort y SelectionSort
En esta entrada vamos a poner, en código, en Java la implementación de los algoritmos de ordenamiento de burbuja, selección y quicksort. Algunos lectores del blog los han solicitado y son de los algoritmos que más se estudian en la facultad.
QuickSort
El algoritmo quicksort tiene un complejidad logarítmica O(n log n).
public static void quickSort(int[] arr, int left, int right) { int pivotIndex = left + (right - left) / 2; int pivotValue = arr[pivotIndex]; int i = left; int j = right; while (i <= j) { while (arr[i] < pivotValue) { i++; } while (arr[j] > pivotValue) { j--; } if (i <= j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; i++; j--; } if (left < i) { quickSort(arr, left, j); } if (right > i) { quickSort(arr, i, right); } } }
BubbleSort
Este es, sin dudas de los más fáciles de implementar y más usados por los estudiantes. La complejidad es O(n^2).
public static void bubbleSort(int[] arr) { int lastIndex = arr.length - 1; for (int j = 0; j < lastIndex; j++) { for (int i = 0; i < lastIndex - j; i++) { if (arr[i] > arr[i + 1]) { int tmp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = tmp; } } } }
Selection Sort
Al igual que burbuja, la doble anidación provoca O(n^2).
public static void selectionSort(int[] arr) { int len = arr.length; for (int i = 0; i < len - 1; i++) { int minIndex = i; for (int j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } int tmp = arr[minIndex]; arr[minIndex] = arr[i]; arr[i] = tmp; } }
Espero te sirvan estos algoritmos.