logo

Radix algoritam sortiranja

U ovom ćemo članku raspravljati o Radix algoritmu sortiranja. Radix sortiranje je algoritam linearnog sortiranja koji se koristi za cijele brojeve. U Radix sortiranju, izvodi se sortiranje znamenka po znamenka koja počinje od najmanje značajne znamenke prema najznačajnijoj znamenki.

Proces radix sortiranja funkcionira slično sortiranju imena učenika, prema abecednom redu. U ovom slučaju postoji 26 radixa formiranih zbog 26 alfabeta u engleskom jeziku. U prvom prolazu imena učenika grupiraju se prema uzlaznom redoslijedu prvog slova njihovih imena. Nakon toga, u drugom prolazu, njihova se imena grupiraju prema uzlaznom redoslijedu drugog slova njihovog imena. I proces se nastavlja dok ne pronađemo sortirani popis.

parcijalni derivati ​​u lateksu

Sada, da vidimo algoritam Radix sortiranja.

Algoritam

 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 

Rad Radix algoritma sortiranja

Pogledajmo sada rad algoritma Radix sortiranja.

Koraci korišteni u sortiranju radix sortiranja navedeni su kako slijedi -

  • Prvo, moramo pronaći najveći element (pretpostavimo max ) iz zadanog niza. Pretpostavimo 'x' biti broj znamenki u max . The 'x' je proračunat jer trebamo proći kroz značajna mjesta svih elemenata.
  • Nakon toga prođite jedno po jedno svako značajno mjesto. Ovdje moramo upotrijebiti bilo koji stabilni algoritam sortiranja za sortiranje znamenki svakog značajnog mjesta.

Pogledajmo sada detaljno rad radix sortiranja pomoću primjera. Da bismo to jasnije razumjeli, uzmimo nesortirani niz i pokušajmo ga sortirati pomoću radix sortiranja. To će objašnjenje učiniti jasnijim i lakšim.

Radix algoritam sortiranja

U zadanom nizu najveći element je 736 koji imaju 3 znamenki u njemu. Dakle, petlja će se pokrenuti do tri puta (tj. do stotine mjesta ). To znači da su za sortiranje niza potrebna tri prolaza.

Sada prvo sortirajte elemente na temelju znamenki mjesta jedinica (tj. x = 0 ). Ovdje koristimo algoritam sortiranja brojanjem za sortiranje elemenata.

Prolaz 1:

U prvom prolazu lista se sortira na temelju znamenki na mjestu 0.

Radix algoritam sortiranja

Nakon prvog prolaza, elementi niza su -

Radix algoritam sortiranja

Prolaz 2:

U ovom prolazu, popis se sortira na temelju sljedećih značajnih znamenki (tj. znamenki na 10.thmjesto).

Radix algoritam sortiranja

Nakon drugog prolaza, elementi niza su -

Radix algoritam sortiranja

Prolaz 3:

U ovom prolazu, popis se sortira na temelju sljedećih značajnih znamenki (tj. znamenki na 100.thmjesto).

Radix algoritam sortiranja

Nakon trećeg prolaza, elementi niza su -

java util datum
Radix algoritam sortiranja

Sada je niz poredan uzlaznim redoslijedom.

Radix složenost sortiranja

Sada, da vidimo vremensku složenost Radix sortiranja u najboljem slučaju, prosječnom slučaju i najgorem slučaju. Također ćemo vidjeti kompleksnost prostora Radix sortiranja.

1. Vremenska složenost

Slučaj Vremenska složenost
Najbolji slučaj Ω(n+k)
Prosječan slučaj θ(nk)
Najgori slučaj O(nk)
    Složenost u najboljem slučaju -To se događa kada nije potrebno sortiranje, tj. niz je već sortiran. Najbolja vremenska složenost Radix sortiranja je Ω(n+k) .Prosječna složenost slučaja -To se događa kada su elementi niza u zbrkanom redoslijedu koji nije ispravno uzlazan i nije ispravno silazni. Prosječna složenost slučaja Radix sortiranja je θ(nk) .Složenost u najgorem slučaju -To se događa kada se elementi niza moraju sortirati obrnutim redoslijedom. To znači da pretpostavimo da morate sortirati elemente niza uzlaznim redoslijedom, ali njegovi elementi su u silaznom redoslijedu. Najgori slučaj vremenske složenosti Radix sortiranja je O(nk) .

Radix sort je ne-komparativni algoritam sortiranja koji je bolji od algoritama komparativnog sortiranja. Ima linearnu vremensku složenost koja je bolja od komparativnih algoritama sa složenošću O(n logn).

2. Složenost prostora

Složenost prostora O(n + k)
Stabilan DA
  • Prostorna složenost Radix sortiranja je O(n + k).

Implementacija Radix sortiranja

Pogledajmo sada programe Radix sortiranja u različitim programskim jezicima.

Program: Napišite program za implementaciju Radix sortiranja u C jeziku.

 #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;>