Szukaj…


Pigeonhole Sort Podstawowe informacje

Pigeonhole Sort to algorytm sortowania, który jest odpowiedni do sortowania list elementów, w których liczba elementów (n) i liczba możliwych kluczowych wartości (N) są w przybliżeniu takie same. Wymaga czasu O (n + Zakres), gdzie n to liczba elementów w tablicy wejściowej, a „Zakres” to liczba możliwych wartości w tablicy.

Działa (pseudo kod) dla sortowania Pigeonhole:

  1. Znajdź wartości minimalne i maksymalne w tablicy. Niech wartości minimalne i maksymalne będą odpowiednio „min” i „max”. Znajdź także zasięg jako „max-min-1”.
  2. Ustaw tablicę początkowo pustych „szuflad” tego samego rozmiaru co zakres.
  3. Odwiedź każdy element tablicy, a następnie umieść każdy element w jego szufladzie. Wejście elementu [i] umieszcza się w otworze na wejściu indeksu [i] - min.
  4. Rozpocznij pętlę w całym szeregu szufladek i umieść elementy z niepustych otworów z powrotem w pierwotnym układzie.

Sortowanie według Pigeonhole jest podobne do sortowania zliczającego, więc oto porównanie między sortowaniem Pigeonhole i sortowaniem zliczającym.

Porównanie sortowania Pigeonhole i sortowania zliczającego

Przykład sortowania Pigeonhole:

Przykład sortowania Pigeonhole

Space Auxiliary: O(n)
Złożoność czasu: O(n + N)

Implementacja 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow