logo

Radixov algoritmus triedenia

V tomto článku budeme diskutovať o Radixovom triediacom algoritme. Radix sort je lineárny triediaci algoritmus, ktorý sa používa pre celé čísla. V Radixovom triedení sa vykonáva triedenie číslica po číslici, ktoré začína od najmenej významnej číslice po najvýznamnejšiu číslicu.

Proces radixového triedenia funguje podobne ako triedenie mien študentov podľa abecedného poradia. V tomto prípade existuje 26 radixov vytvorených vďaka 26 abecedám v angličtine. V prvom prechode sú mená žiakov zoskupené podľa vzostupného poradia prvého písmena ich mien. Potom sa v druhom prechode ich mená zoskupia podľa vzostupného poradia druhého písmena ich mena. A proces pokračuje, kým nenájdeme zoradený zoznam.

hibernovať dialekt

Teraz sa pozrime na algoritmus Radixovho triedenia.

Algoritmus

 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 

Fungovanie Radixovho triediaceho algoritmu

Teraz sa pozrime na fungovanie Radixovho triediaceho algoritmu.

Kroky použité pri triedení radix sort sú uvedené nasledovne -

  • Najprv musíme nájsť najväčší prvok (predpokladajme max ) z daného poľa. Predpokladajme 'X' byť počet číslic v max . The 'X' sa vypočítava, pretože potrebujeme prejsť cez významné miesta všetkých prvkov.
  • Potom prejdite jedno po druhom každé významné miesto. Tu musíme použiť akýkoľvek stabilný triediaci algoritmus na triedenie číslic každého významného miesta.

Teraz sa pozrime na fungovanie radix sort pomocou príkladu. Aby sme to pochopili jasnejšie, zoberme si netriedené pole a skúsme ho zoradiť pomocou radix sort. Vysvetlenie bude jasnejšie a jednoduchšie.

Radixov algoritmus triedenia

V danom poli je najväčší prvok 736 ktoré majú 3 číslice v ňom. Slučka teda prebehne až trikrát (t.j. do stovky miesta ). To znamená, že na zoradenie poľa sú potrebné tri prechody.

Teraz najskôr zoraďte prvky na základe číslic jednotky (t.j. x = 0 ). Tu používame triediaci algoritmus počítania na triedenie prvkov.

Priechod 1:

V prvom prechode je zoznam zoradený na základe číslic na mieste 0.

Radixov algoritmus triedenia

Po prvom prechode sú prvky poľa -

Radixov algoritmus triedenia

Priechod 2:

V tomto prechode je zoznam zoradený na základe nasledujúcich platných číslic (t. j. číslic na 10thmiesto).

obsahuje podreťazec java
Radixov algoritmus triedenia

Po druhom prechode sú prvky poľa -

Radixov algoritmus triedenia

Priechod 3:

V tomto prechode je zoznam zoradený na základe nasledujúcich platných číslic (t. j. číslic na 100thmiesto).

Radixov algoritmus triedenia

Po treťom prechode sú prvky poľa -

Radixov algoritmus triedenia

Teraz je pole zoradené vo vzostupnom poradí.

Zložitosť triedenia Radix

Teraz sa pozrime na časovú zložitosť Radixovho triedenia v najlepšom prípade, priemernom prípade a najhoršom prípade. Uvidíme aj priestorovú zložitosť Radix sortu.

1. Časová zložitosť

Prípad Časová zložitosť
Najlepší prípad Ω(n+k)
Priemerný prípad θ(nk)
V najhoršom prípade O(nk)
    Najlepšia zložitosť prípadu -Vyskytuje sa, keď nie je potrebné žiadne triedenie, t. j. pole je už zoradené. Najlepšia časová zložitosť Radixovho triedenia je Ω(n+k) .Priemerná zložitosť prípadu -Vyskytuje sa vtedy, keď sú prvky poľa v premiešanom poradí, ktoré nie je správne vzostupné a nesprávne zostupné. Priemerná časová zložitosť prípadu Radix sort je θ(nk) .Zložitosť najhoršieho prípadu -Vyskytuje sa, keď sa vyžaduje, aby boli prvky poľa zoradené v opačnom poradí. To znamená, že musíte zoradiť prvky poľa vo vzostupnom poradí, ale jeho prvky sú v zostupnom poradí. Najhorší prípad časovej zložitosti Radixovho triedenia je O(nk) .

Radix sort je nekomparatívny triediaci algoritmus, ktorý je lepší ako porovnávacie triediace algoritmy. Má lineárnu časovú zložitosť, ktorá je lepšia ako porovnávacie algoritmy so zložitosťou O(n logn).

2. Zložitosť priestoru

Vesmírna zložitosť O(n + k)
Stabilný ÁNO
  • Priestorová zložitosť Radixovho triedenia je O(n + k).

Implementácia Radix sort

Teraz sa pozrime na programy Radixu v rôznych programovacích jazykoch.

Program: Napíšte program na implementáciu Radix sort v jazyku C.

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