Buscar..


Pigeonhole Sort Información Básica

Pigeonhole Sort es un algoritmo de clasificación que es adecuado para ordenar listas de elementos donde el número de elementos (n) y el número de valores clave posibles (N) son aproximadamente los mismos. Requiere un tiempo O (n + Rango) donde n es el número de elementos en la matriz de entrada y 'Rango' es el número de valores posibles en la matriz.

Trabajo (pseudo código) para la clasificación de casilleros:

  1. Encuentra valores mínimos y máximos en matriz. Deje que los valores mínimo y máximo sean 'min' y 'max' respectivamente. También encuentra el rango como 'max-min-1'.
  2. Configure una matriz de "casilleros" inicialmente vacíos del mismo tamaño que el rango.
  3. Visita cada elemento de la matriz y luego coloca cada elemento en su casillero. Una entrada de elemento [i] se coloca en el orificio en la entrada de índice [i] - mín.
  4. Inicie el bucle en toda la matriz de casilleros en orden y vuelva a colocar los elementos de los orificios no vacíos en la matriz original.

La clasificación de Pigeonhole es similar a la clasificación de recuento, por lo que aquí hay una comparación entre la Clasificación de Pigeonhole y la clasificación de recuento.

Comparación entre el tipo de casillero y el orden de conteo

Ejemplo de clasificación de casillero:

Ejemplo de clasificación de casillero

Espacio auxiliar: O(n)
Complejidad de tiempo: O(n + N)

Implementación de C #

public class PigeonholeSort
{
    private static void SortPigeonhole(int[] input, int n)
    {
        int min = input[0], max = input[n];
        for (int i = 1; i < n; i++)
        {
            if (input[i] < min) min = input[i];
            if (input[i] > max) max = input[i];
        }
        int range = max - min + 1;
        int[] holes = new int[range];

        for (int i = 0; i < n; i++)
        {
            holes[input[i] - min] = input[i];
        }
        int index = 0;

        for (int i = 0; i < range; i++)
        {
            foreach (var value in holes)
            {
                input[index++] = value;
            }
        }
    }

    public static int[] Main(int[] input)
    {
        SortPigeonhole(input, input.Length);
        return input;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow