Apuntes DAM
Volver al inicio

Algoritmos de ordenación

Algoritmos7 algoritmos · 14 ejercicios corregidos · código en Java, Python, JavaScript, C# y PHP

Ordenar es el ejemplo de manual para aprender a medir algoritmos: todos hacen lo mismo, pero unos tardan el cuadrado del número de datos y otros n log n. Con mil datos la diferencia apenas se nota; con un millón, es la diferencia entre medio segundo y varias horas.

Los métodos sencillos (burbuja, selección e inserción) se entienden en cinco minutos y son los que se piden en los exámenes de primero. Los rápidos (mergesort, quicksort, heapsort) usan divide y vencerás o un montículo. En la práctica se usa el de la biblioteca (Arrays.sort, sorted, Array.prototype.sort), que combina varios; pero saber cómo funcionan explica por qué Arrays.sort de objetos es estable y el de int no.

Los algoritmos

Cuál elegir

AlgoritmoMejorMedioPeorMemoria extraEstable
Ordenación por burbujaO(n)O(n²)O(n²)O(1)Sí
Ordenación por selecciónO(n²)O(n²)O(n²)O(1)No
Ordenación por inserciónO(n)O(n²)O(n²)O(1)Sí
Mergesort (ordenación por mezcla)O(n log n)O(n log n)O(n log n)O(n)Sí
Quicksort (ordenación rápida)O(n log n)O(n log n)O(n²)O(log n)No
Heapsort (ordenación por montículo)O(n log n)O(n log n)O(n log n)O(1)No
Counting sort (ordenación por cuentas)O(n + k)O(n + k)O(n + k)O(k)Sí

Estable: los elementos iguales conservan su orden original (importa al ordenar por varias claves). k es el tamaño del rango de valores en counting sort.

Para practicar más