Radix sorteringsalgoritme i datastruktur
โก Smart oppsummering
Radix Sort er en ikke-komparativ lineรฆr sorteringsalgoritme som grupperer heltall etter sifferposisjon ved hjelp av en stabil subrutine som tellesortering. Den sorterer tall, strenger og nรธkler med fast bredde raskere enn sammenligningsbaserte sorteringer for mange inndata.

Hva er Radix Sort Algorithm?
Radix Sort er en ikke-komparativ sorteringsalgoritme. Den fungerer etter grupperingping de individuelle sifrene til elementene som skal sorteres. En stabil sorteringsteknikk brukes deretter til รฅ organisere elementene basert pรฅ deres radiks. Det er en lineรฆr sorteringsalgoritme.
Sorteringsprosessen involverer fรธlgende egenskaper:
- Finne det stรธrste elementet og fรฅ antall sifre for det elementet. Dette gir antall iterasjoner sorteringsprosessen utfรธrer.
- Grouping de individuelle sifrene til elementene pรฅ samme signifikante posisjon i hver iterasjon.
- Gruppenping Prosessen starter med det minst signifikante sifferet og slutter med det mest signifikante sifferet.
- Sortering av elementene basert pรฅ sifrene pรฅ den signifikante posisjonen.
- Opprettholder den relative rekkefรธlgen av elementer som har samme nรธkkelverdi. Denne egenskapen til Radix Sort gjรธr den til en stabil sortering.
Den siste iterasjonen returnerer en fullstendig sortert liste.
Arbeid av Radix Sort Algorithm
Liste over heltall som skal sorteres
La oss sortere listen over heltall i figuren ovenfor i stigende rekkefรธlge ved hjelp av Radix Sort.
Her er trinnene for รฅ utfรธre Radix Sort-prosessen:
Trinn 1) Identifiser det stรธrste elementet i listen. Her er det 835.
Trinn 2) Tell sifrene. 835 har 3 sifre, sรฅ antallet iterasjoner er 3.
Trinn 3) Bestem grunntallet. Siden dette er et desimaltall, er grunntallet 10.
Trinn 4) Start den fรธrste iterasjonen.
a) Fรธrste iterasjon
Sortering etter siste siffer
I den fรธrste iterasjonen tar vi for oss enhetsplassverdien til hvert element.
Trinn 1) Modifiser heltallet med 10 for รฅ fรฅ enhetsplassen til elementene. For eksempel gir 623 mod 10 3, og 248 mod 10 gir 8.
Trinn 2) Bruk tellesortering eller en annen stabil sortering for รฅ organisere heltallene etter deres minst signifikante siffer. Fra figuren faller 248 inn i den รฅttende kategorien, 623 faller inn i den tredje kategorien, og sรฅ videre.
Etter den fรธrste iterasjonen ser listen nรฅ slik ut.
Liste etter fรธrste iterasjon
Listen er ikke sortert ennรฅ og krever flere iterasjoner.
b) Andre iterasjon
Sortering basert pรฅ sifre pรฅ tiere
I denne iterasjonen tar vi for oss sifferet pรฅ tiendeplassen i sorteringsprosessen.
Trinn 1) Del heltallene med 10. For eksempel gir 248 delt pรฅ 10 24.
Trinn 2) Modifiser utgangen fra trinn 1 med 10. 24 mod 10 gir 4.
Trinn 3) Fรธlg trinn 2 fra forrige iterasjon.
Etter den andre iterasjonen ser listen nรฅ slik ut:
Liste etter den andre iterasjonen
Listen er fortsatt ikke fullstendig sortert, da den ikke er i stigende rekkefรธlge ennรฅ.
c) Tredje iterasjon
Sortering basert pรฅ sifrene pรฅ hundreplass
For den siste iterasjonen รธnsker vi รฅ fรฅ det mest signifikante sifferet. I dette tilfellet er det hundrerplassen for hvert av heltallene i listen.
Trinn 1) Del heltallene med 100. For eksempel gir 415 delt pรฅ 100 4.
Trinn 2) Modifiser resultatet fra trinn 1 med 10. 4 mod 10 gir 4.
Trinn 3) Fรธlg trinn 3 fra forrige iterasjon.
Liste etter den tredje iterasjonen
Listen er nรฅ sortert i stigende rekkefรธlge. Den siste iterasjonen er fullfรธrt, og sorteringsprosessen er ferdig.
Pseudokode for Radix Sort Algorithm
Her er pseudokoden for Radix Sort-algoritmen:
radixSortAlgo(arr as an array) Find the largest element in arr maximum = the element in arr that is the largest Find the number of digits in maximum k = the number of digits in maximum Create buckets of size 0-9 k times for j -> 0 to k Acquire the jth place of each element in arr. Here j = 0 represents the least significant digit. Use a stable sorting algorithm like counting sort to sort the elements in arr according to the digits in the jth place arr = sorted elements
C++ Program for รฅ implementere Radix Sort
#include <iostream> using namespace std; // Function to get the largest element in an array int getMaximum(int arr[], int n) { int maximum = arr[0]; for (int i = 1; i < n; i++) { if (maximum < arr[i]) maximum = arr[i]; } return maximum; } // We are using counting sort to sort the elements digit by digit void countingSortAlgo(int arr[], int size, int position) { const int limit = 10; int result[size]; int count[limit] = {0}; // Calculating the count of each integer for (int j = 0; j < size; j++) count[(arr[j] / position) % 10]++; // Calculating the cumulative count for (int j = 1; j < limit; j++) { count[j] += count[j - 1]; } // Sort the integers for (int j = size - 1; j >= 0; j--) { result[count[(arr[j] / position) % 10] - 1] = arr[j]; count[(arr[j] / position) % 10]--; } for (int i = 0; i < size; i++) arr[i] = result[i]; } // The radixSort algorithm void radixSortAlgo(int arr[], int size) { // Get the largest element in the array int maximum = getMaximum(arr, size); for (int position = 1; maximum / position > 0; position *= 10) countingSortAlgo(arr, size, position); } // Printing final result void printResult(int arr[], int size) { for (int i = 0; i < size; i++) { cout << arr[i] << " "; } cout << endl; } int main() { int arr[] = {162, 623, 835, 415, 248}; int size = sizeof(arr) / sizeof(arr[0]); radixSortAlgo(arr, size); printResult(arr, size); }
Utgang:
162 248 415 623 835
Python Program for Radix Sort Algorithm
# Radix Sort in Python def countingSortAlgo(arr, position): n = len(arr) result = [0] * n count = [0] * 10 # Calculating the count of elements in the array arr for j in range(0, n): element = arr[j] // position count[element % 10] += 1 # Calculating the cumulative count for j in range(1, 10): count[j] += count[j - 1] # Sorting the elements i = n - 1 while i >= 0: element = arr[i] // position result[count[element % 10] - 1] = arr[i] count[element % 10] -= 1 i -= 1 for j in range(0, n): arr[j] = result[j] def radixSortAlgo(arr): # Acquiring the largest element in the array maximum = max(arr) # Using counting sort to sort digit by digit position = 1 while maximum // position > 0: countingSortAlgo(arr, position) position *= 10 data = [162, 623, 835, 415, 248] radixSortAlgo(data) print(data)
Utgang:
[162, 248, 415, 623, 835]
Kompleksitethetsanalyse av Radix Sort
Det er to typer kompleksitet รฅ vurdere: romkompleksitet og tidskompleksitet.
- Romkompleksitet: O(n + b) hvor n er stรธrrelsen pรฅ tabellen og b er basen som vurderes.
- Tidskompleksitet: O(d * (n + b)) hvor d er antall sifre i det stรธrste elementet i tabellen.
Romkompleksiteten til Radix Sort
To funksjoner รฅ fokusere pรฅ for romkompleksitet:
- Antall elementer i matrisen, n.
- Basen som brukes til รฅ representere elementene, b.
Noen ganger kan denne basen vรฆre stรธrre enn stรธrrelsen pรฅ tabellen. Den totale kompleksiteten er dermed O(n + b).
Fรธlgende egenskaper ved elementene i listen kan gjรธre Radix Sort-plass ineffektiv:
- Elementer med et stort antall sifre.
- Basen av elementene er stor, som 64-bit tall.
Tidskompleksiteten til Radix Sort
Ved รฅ bruke tellende sortering som en subrutine, tar hver iterasjon O(n + b) tid. Hvis det finnes d iterasjoner, blir den totale kjรธretiden O(d * (n + b))Her betegner ยซOยป kompleksitetsfunksjonen.
Linearitet av Radix Sort
Radixsortering er lineรฆr nรฅr:
- d er konstant, der d er antall sifre i det stรธrste elementet.
- b er ikke vesentlig stรธrre enn n.
Sammenligning av Radix Sort med annen sortering Algorithms
Radix Sorts kompleksitet avhenger av tallstรธrrelsen. Best-case og average-case er begge O(d * (n + b)). Ytelsen varierer med den indre sorteringen โ tellesortering er standard, men enhver stabil sortering fungerer.
Anvendelser av Radix Sort Algorithm
Viktige bruksomrรฅder for Radix Sort er:
- Radix Sort kan brukes som en algoritme for stedsfinning der store verdiomrรฅder er involvert.
- Den brukes til รฅ konstruere en suffiksmatrise i DC3-algoritmen.
- Den brukes i sekvensielle maskiner med tilfeldig tilgang der poster tastes inn med identifikatorer med fast bredde.







