algorithm
Sortowanie według Pigeonhole
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:
- 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”.
- Ustaw tablicę początkowo pustych „szuflad” tego samego rozmiaru co zakres.
- 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.
- 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.
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