logo

Radix rūšiavimo algoritmas

Šiame straipsnyje aptarsime Radix rūšiavimo algoritmą. Radix sort yra linijinis rūšiavimo algoritmas, naudojamas sveikiesiems skaičiams. Rikiuojant simboliu, atliekamas rūšiavimas pagal skaitmenis, kuris pradedamas nuo mažiausiai reikšmingo skaitmens iki reikšmingiausio skaitmens.

Radix rūšiavimo procesas veikia panašiai kaip mokinių vardų rūšiavimas pagal abėcėlę. Šiuo atveju dėl 26 abėcėlių anglų kalboje susidaro 26 raidės. Pirmajame važiavime mokinių vardai sugrupuojami pagal jų vardų pirmosios raidės didėjimo tvarką. Po to, antrajame važiavime, jų vardai sugrupuojami pagal antrosios vardo raidės didėjimo tvarką. Ir procesas tęsiasi tol, kol randame surūšiuotą sąrašą.

skirtumas tarp dvejetainio medžio ir dvejetainio paieškos medžio

Dabar pažiūrėkime Radix rūšiavimo algoritmą.

Algoritmas

 radixSort(arr) max = largest element in the given array d = number of digits in the largest element (or, max) Now, create d buckets of size 0 - 9 for i -> 0 to d sort the array elements using counting sort (or any stable sort) according to the digits at the ith place 

Radix rūšiavimo algoritmo veikimas

Dabar pažiūrėkime, kaip veikia Radix rūšiavimo algoritmas.

Veiksmai, naudojami rūšiuojant radikso rūšiavimą, išvardyti taip:

  • Pirmiausia turime rasti didžiausią elementą (tarkime maks ) iš nurodyto masyvo. Tarkime 'x' turi būti skaitmenų skaičius maks . The 'x' apskaičiuojamas, nes turime pereiti reikšmingas visų elementų vietas.
  • Po to eikite po vieną kiekvieną reikšmingą vietą. Čia turime naudoti bet kokį stabilų rūšiavimo algoritmą, kad surūšiuotume kiekvienos reikšmingos vietos skaitmenis.

Dabar pažiūrėkime, kaip veikia radikso rūšiavimas, naudodami pavyzdį. Norėdami tai suprasti aiškiau, paimkime nerūšiuotą masyvą ir pabandykite jį surūšiuoti naudodami radix sort. Tai padarys paaiškinimą aiškesnį ir lengvesnį.

Radix rūšiavimo algoritmas

Pateiktame masyve didžiausias elementas yra 736 tai turi 3 skaitmenys jame. Taigi, kilpa veiks iki trijų kartų (t. y. iki šimtų vieta ). Tai reiškia, kad norint rūšiuoti masyvą, reikia trijų kartų.

Dabar pirmiausia surūšiuokite elementus pagal vieneto vietos skaitmenis (t. y. x = 0 ). Čia mes naudojame skaičiavimo rūšiavimo algoritmą elementams rūšiuoti.

1 leidimas:

Pirmuoju važiavimu sąrašas rūšiuojamas pagal 0 vietoje esančius skaitmenis.

Radix rūšiavimo algoritmas

Po pirmojo praėjimo masyvo elementai yra -

Radix rūšiavimo algoritmas

2 leidimas:

Šiame įraše sąrašas rūšiuojamas pagal kitus reikšmingus skaitmenis (t. y. skaitmenis po 10thvieta).

Radix rūšiavimo algoritmas

Po antrojo praėjimo masyvo elementai yra -

Radix rūšiavimo algoritmas

3 leidimas:

Šiame įraše sąrašas rūšiuojamas pagal kitus reikšmingus skaitmenis (t. y. skaitmenis po 100thvieta).

Radix rūšiavimo algoritmas

Po trečiojo praėjimo masyvo elementai yra -

Radix rūšiavimo algoritmas

Dabar masyvas rūšiuojamas didėjančia tvarka.

viršutinis indeksas iliustratoriuje

Radix rūšiavimo sudėtingumas

Dabar pažiūrėkime, koks yra Radix rūšiavimo sudėtingumas geriausiu, vidutiniu ir blogiausiu atveju. Taip pat pamatysime Radix rūšiavimo erdvės sudėtingumą.

1. Laiko sudėtingumas

Byla Laiko sudėtingumas
Geriausias atvejis Ω(n+k)
Vidutinis atvejis θ(nk)
Blogiausiu atveju O (nk)
    Geriausio atvejo sudėtingumas –Tai atsitinka, kai nereikia rūšiuoti, ty masyvas jau surūšiuotas. Geriausias Radix rūšiavimo laiko sudėtingumas yra Ω(n+k) .Vidutinis atvejo sudėtingumas –Tai atsitinka, kai masyvo elementai yra sumaišyti, o tai netinkamai kyla ir netinkamai mažėja. Vidutinis Radix rūšiavimo atvejo sudėtingumas yra θ(nk) .Blogiausio atvejo sudėtingumas –Tai atsitinka, kai masyvo elementus reikia rūšiuoti atvirkštine tvarka. Tai reiškia, kad jūs turite rūšiuoti masyvo elementus didėjančia tvarka, bet jo elementai yra mažėjančia tvarka. Blogiausias „Radix“ rūšiavimo laiko sudėtingumas yra O (nk) .

Radix rūšiavimas yra nelyginamasis rūšiavimo algoritmas, kuris yra geresnis už lyginamuosius rūšiavimo algoritmus. Jis turi linijinį laiko sudėtingumą, kuris yra geresnis nei lyginamieji algoritmai, kurių sudėtingumas O(n logn).

2. Erdvės sudėtingumas

Erdvės sudėtingumas O(n + k)
Stabilus TAIP
  • Radix rūšiavimo erdvės sudėtingumas yra O(n + k).

Radix rūšiavimo įgyvendinimas

Dabar pažiūrėkime, kaip Radix programos rūšiuojamos skirtingomis programavimo kalbomis.

Programa: Parašykite programą, kuri įdiegtų Radix sort C kalba.

 #include int getMax(int a[], int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } void countingSort(int a[], int n, int place) // function to implement counting sort { int output[n + 1]; int count[10] = {0}; // Calculate count of elements for (int i = 0; i <n; i++) count[(a[i] place) % 10]++; calculate cumulative frequency for (int i="1;" <10; count[i] +="count[i" - 1]; place the elements in sorted order 1;>= 0; i--) { output[count[(a[i] / place) % 10] - 1] = a[i]; count[(a[i] / place) % 10]--; } for (int i = 0; i 0; place *= 10) countingSort(a, n, place); } // function to print array elements void printArray(int a[], int n) { for (int i = 0; i <n; ++i) { printf('%d ', a[i]); } printf('
'); int main() a[]="{181," 289, 390, 121, 145, 736, 514, 888, 122}; n="sizeof(a)" sizeof(a[0]); printf('before sorting array elements are - 
'); printarray(a,n); radixsort(a, n); printf('after applying radix sort, the printarray(a, < pre> <p> <strong>Output:</strong> </p> <p>After the execution of the above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/06/radix-sort-algorithm-8.webp" alt="Radix Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement Radix sort in C++.</p> <pre> #include using namespace std; int getMax(int a[], int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } void countingSort(int a[], int n, int place) // function to implement counting sort { int output[n + 1]; int count[10] = {0}; // Calculate count of elements for (int i = 0; i <n; i++) count[(a[i] place) % 10]++; calculate cumulative frequency for (int i="1;" <10; count[i] +="count[i" - 1]; place the elements in sorted order 1;>= 0; i--) { output[count[(a[i] / place) % 10] - 1] = a[i]; count[(a[i] / place) % 10]--; } for (int i = 0; i 0; place *= 10) countingSort(a, n, place); } // function to print array elements void printArray(int a[], int n) { for (int i = 0; i <n; ++i) cout< <a[i]<<' '; } int main() { a[]="{171," 279, 380, 111, 135, 726, 504, 878, 112}; n="sizeof(a)" sizeof(a[0]); cout<<'before sorting array elements are - 
'; printarray(a,n); radixsort(a, n); cout<<'

after applying radix sort, the printarray(a, return 0; < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/06/radix-sort-algorithm-9.webp" alt="Radix Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement Radix sort in C#.</p> <pre> using System; class RadixSort { static int getMax(int[] a, int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } static void countingSort(int[] a, int n, int place) // function to implement counting sort { int[] output = new int[n+1]; int[] count = new int[10]; // Calculate count of elements for (int i = 0; i <n; i++) count[(a[i] place) % 10]++; calculate cumulative frequency for (int i="1;" <10; count[i] +="count[i" - 1]; place the elements in sorted order 1;>= 0; i--) { output[count[(a[i] / place) % 10] - 1] = a[i]; count[(a[i] / place) % 10]--; } for (int i = 0; i 0; place *= 10) countingSort(a, n, place); } // function to print array elements static void printArray(int[] a, int n) { for (int i = 0; i <n; ++i) console.write(a[i] + ' '); } static void main() { int[] a="{161," 269, 370, 101, 125, 716, 54, 868, 12}; int n="a.Length;" console.write('before sorting array elements are - 
'); printarray(a,n); radixsort(a, n); console.write('

after applying radix sort, the printarray(a, < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/06/radix-sort-algorithm-10.webp" alt="Radix Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement Radix sort in Java.</p> <pre> class RadixSort { int getMax(int a[], int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } void countingSort(int a[], int n, int place) // function to implement counting sort { int[] output = new int[n+1]; int[] count = new int[10]; // Calculate count of elements for (int i = 0; i <n; i++) count[(a[i] place) % 10]++; calculate cumulative frequency for (int i="1;" <10; count[i] +="count[i" - 1]; place the elements in sorted order 1;>= 0; i--) { output[count[(a[i] / place) % 10] - 1] = a[i]; count[(a[i] / place) % 10]--; } for (int i = 0; i 0; place *= 10) countingSort(a, n, place); } // function to print array elements void printArray(int a[], int n) { for (int i = 0; i <n; ++i) system.out.print(a[i] + ' '); } public static void main(string args[]) { int a[]="{151," 259, 360, 91, 115, 706, 34, 858, 2}; n="a.length;" radixsort r1="new" radixsort(); system.out.print('before sorting array elements are - 
'); r1.printarray(a,n); r1.radixsort(a, n); system.out.print('

after applying radix sort, the r1.printarray(a, < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/06/radix-sort-algorithm-11.webp" alt="Radix Sort Algorithm"> <p>So, that&apos;s all about the article. Hope the article will be helpful and informative to you.</p> <hr></n;></n;></pre></n;></n;></pre></n;></n;></pre></n;></n;>