Clasificación de enanos

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 1 de junio de 2021; la verificación requiere 1 edición .

Gnome sort ( eng.  Gnome sort ) es un algoritmo de clasificación similar a la clasificación por inserciones , pero a diferencia de este último, antes de insertar en el lugar correcto, se produce una serie de intercambios, como en la clasificación de burbujas . El nombre proviene del supuesto comportamiento de los gnomos de jardín al clasificar una línea de macetas de jardín.

La clasificación enana se basa en la técnica utilizada por el gnomo de jardín holandés común ( tuinkabouter holandés  ). Este es el método por el cual un gnomo de jardín clasifica una línea de macetas. Esencialmente, mira las macetas de jardín actuales y anteriores: si están en el orden correcto, avanza una maceta; de lo contrario, las intercambia y retrocede una maceta. Condiciones de contorno: si no hay bote anterior, se avanza; si no hay otro bote, está acabado. dick grun

El algoritmo es conceptualmente simple y no requiere bucles anidados. tiempo de trabajo En la práctica, el algoritmo puede ejecutarse tan rápido como la ordenación por inserción.

El algoritmo encuentra el primer lugar donde dos elementos vecinos están en el orden incorrecto y los intercambia. Aprovecha el hecho de que un intercambio puede producir un nuevo par en el orden incorrecto justo antes o después de los elementos intercambiados. No permite ordenar los elementos después de la posición actual, por lo que solo es necesario verificar la posición antes de los elementos reorganizados.

Descripción

A continuación se muestra el pseudocódigo de clasificación . Esta es una versión optimizada que utiliza la variable j para permitir avanzar hasta donde se quedó antes de moverse hacia la izquierda, evitando iteraciones y comparaciones innecesarias:


gnomeSort(a[0..size - 1]) yo = 1; j = 2; mientras yo <tamaño if a[i - 1] > a[i] //para ordenar en orden ascendente, cambie el signo de comparación a < yo = j; j = j + 1; más intercambiar a[i - 1] y a[i] yo = yo - 1; si yo == 0 yo = j; j = j + 1;

Ejemplo:

Si queremos ordenar una matriz con elementos [4] [2] [7] [3] de mayor a menor, ocurrirá lo siguiente durante las iteraciones del bucle while:

Optimización

Como resultado de la optimización de gnome, la clasificación se transforma naturalmente en clasificación por inserción . Cada vez que "gnomo" alcanza un nuevo número, todos los valores a la izquierda de "gnomo" ya están ordenados.

Enlaces