Radix sortimise algoritm andmestruktuuris
โก Nutikas kokkuvรตte
Radix Sort on mittevรตrdlev lineaarne sortimisalgoritm, mis rรผhmitab tรคisarve numbripositsiooni jรคrgi, kasutades stabiilset alamrutiini, nรคiteks loendamissortimist. See sorteerib numbreid, stringe ja fikseeritud laiusega vรตtmeid paljude sisendite puhul kiiremini kui vรตrdluspรตhine sortimine.

Mis on Radixi sortimise algoritm?
Radix Sort on mittevรตrdlev sortimisalgoritm. See tรถรถtab rรผhmade kaupa.ping sorteeritavate elementide รผksikud numbrid. Seejรคrel kasutatakse elementide korraldamiseks nende radixi alusel stabiilset sortimistehnikat. See on lineaarne sortimisalgoritm.
Sorteerimisprotsess hรตlmab jรคrgmisi omadusi:
- Maksimaalse elemendi leidmine ja selle elemendi numbrite arvu saamine. See annab sortimisprotsessi kรคigus tehtavate iteratsioonide arvu.
- Grouping iga iteratsiooni samal olulisel positsioonil olevate elementide รผksikud numbrid.
- Sahjuping Protsess algab kรตige vรคiksema tรคhtsusega numbrist ja lรตpeb kรตige suurema tรคhtsusega numbriga.
- Elementide sorteerimine selle olulise positsiooni numbrite pรตhjal.
- Sama vรตtmevรครคrtusega elementide suhtelise jรคrjestuse sรคilitamine. See Radix Sorti omadus muudab selle stabiilseks sortimiseks.
Viimane iteratsioon tagastab tรคielikult sorteeritud loendi.
Radixi sortimise algoritmi tรถรถ
Sorteeritavate tรคisarvude loend
Sorteerime รผlaltoodud joonisel olevad tรคisarvud radikaalsortimise abil kasvavas jรคrjekorras.
Radixi sortimise protsessi teostamiseks toimige jรคrgmiselt.
Step 1) Tuvasta loendi suurim element. Siin on see 835.
Step 2) Loe selle numbrid kokku. Arv 835 on kolmekohaline, seega on iteratsioonide arv 3.
Step 3) Mรครคrake alus. Kuna see on kรผmnendmurd, on alus 10.
Step 4) Alustage esimest iteratsiooni.
a) Esimene iteratsioon
Sorteerimine viimase numbri jรคrgi
Esimeses iteratsioonis arvestame iga elemendi รผhikulise kohavรครคrtusega.
Step 1) Elementide รผhikukoha saamiseks modifitseeri tรคisarvu 10 vรตrra. Nรคiteks 623 mod 10 annab tulemuseks 3 ja 248 mod 10 annab tulemuseks 8.
Step 2) Kasutage loendamissortimist vรตi muud stabiilset sortimist, et korraldada tรคisarvud nende vรคhimolulise numbri jรคrgi. Jooniselt langeb 248 8. รคmbrisse, 623 3. รคmbrisse jne.
Pรคrast esimest iteratsiooni nรคeb nimekiri nรผรผd vรคlja selline.
Loetelu pรคrast esimest iteratsiooni
Nimekiri pole veel sorteeritud ja vajab rohkem kordamist.
b) Teine iteratsioon
Sorteerimine kรผmnendkoha numbrite alusel
Selles iteratsioonis vaatleme sortimisprotsessi jaoks kรผmneliste kohta.
Step 1) Jaga tรคisarvud 10-ga. Nรคiteks 248 jagamisel 10-ga saame 24.
Step 2) Modifitseeri 1. sammu vรคljundit 10 vรตrra. 24 modifitseeri 10 annab tulemuseks 4.
Step 3) Jรคrgige eelmise iteratsiooni 2. sammu.
Pรคrast teist korda lรคbimist nรคeb nimekiri vรคlja selline:
Nimekiri pรคrast teist iteratsiooni
Nimekiri pole veel tรคielikult sorteeritud, kuna see pole veel kasvavas jรคrjekorras.
c) Kolmas iteratsioon
Sorteerimine sajaliste numbrite jรคrgi
Viimase iteratsiooni jaoks tahame leida kรตige olulisema numbri. Antud juhul on see iga loendis oleva tรคisarvu sajandik.
Step 1) Jaga tรคisarvud 100-ga. Nรคiteks 415 jagamisel 100-ga saame 4.
Step 2) Modifitseeri 1. sammu tulemust 10 vรตrra. 4 modifitseeri 10 annab tulemuseks 4.
Step 3) Jรคrgige eelmise iteratsiooni 3. sammu.
Loetelu pรคrast kolmandat iteratsiooni
Loend on nรผรผd kasvavas jรคrjekorras sorteeritud. Viimane iteratsioon on lรตpule viidud ja sortimisprotsess on lรตppenud.
Radixi sortimisalgoritmi pseudokood
Siin on Radixi sortimisalgoritmi pseudokood:
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++ Programm Radix Sorti rakendamiseks
#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); }
Vรคljund:
162 248 415 623 835
Python Programm Radix Sort Algorithmi jaoks
# 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)
Vรคljund:
[162, 248, 415, 623, 835]
Radix-sortimise keerukusanalรผรผs
Arvesse tuleb vรตtta kahte tรผรผpi keerukust: ruumi keerukus ja aja keerukus.
- Ruumi keerukus: O(n + b), kus n on massiivi suurus ja b on vaadeldav baas.
- Ajaline keerukus: O(d * (n + b)), kus d on massiivi suurima elemendi numbrite arv.
Radixi sortimise ruumi keerukus
Ruumi keerukuse puhul tuleks keskenduda kahele omadusele:
- Massiivi elementide arv, n.
- Elementide kujutamiseks kasutatav alus, b.
Mรตnikord vรตib see baas olla suurem kui massiivi suurus. Seega on รผldine keerukus O(n + b).
Loendi elementide jรคrgmised omadused vรตivad muuta Radixi sortimisruumi ebaefektiivseks:
- Suure arvu numbritega elemendid.
- Elementide alus on suur, nagu 64-bitised numbrid.
Radixi sortimise ajaline keerukus
Loendava sortimise kasutamisel alamprogrammina vรตtab iga iteratsioon aega O(n + b) aega. Kui d iteratsioonid on olemas, muutub kogu tรถรถaeg O(d * (n + b))Siin tรคhistab โOโ keerukusfunktsiooni.
Radixi sortimise lineaarsus
Radix-sortimine on lineaarne, kui:
- d on konstantne, kus d on suurima elemendi numbrite arv.
- b ei ole oluliselt suurem kui n.
Radixi sortimise vรตrdlus teiste sortimistega Algorithms
Radix-sortimise keerukus sรตltub arvu suurusest. Nii parim kui ka keskmine juhtum on O(d * (n + b)). Jรตudlus varieerub olenevalt sisemisest sortimisest โ loendav sortimine on standardne, kuid iga stabiilne sortimine tรถรถtab.
Radixi sortimise algoritmi rakendused
Radix Sortimise olulised rakendused on:
- Radix Sortimist saab kasutada asukoha leidmise algoritmina, kui tegemist on suurte vรครคrtusvahemikega.
- Seda kasutatakse DC3 algoritmis sufiksimassiivi konstrueerimiseks.
- Seda kasutatakse jรคrjestikustes, muutpรถรถrdusega masinates, kus kirjed on vรตtmestatud fikseeritud laiusega identifikaatoritega.







