logo

Radix-lajittelualgoritmi

Tässä artikkelissa käsittelemme Radix-lajittelualgoritmia. Radix sort on lineaarinen lajittelualgoritmi, jota käytetään kokonaisluvuille. Radix-lajittelussa suoritetaan numeroittainen lajittelu, joka alkaa vähiten merkitsevästä numerosta merkittävimpään numeroon.

Kantalauseen lajittelu toimii samalla tavalla kuin oppilaiden nimien lajittelu aakkosjärjestyksen mukaan. Tässä tapauksessa englanninkielisten 26 aakkosten ansiosta muodostuu 26 kantasanaa. Ensikierroksella opiskelijoiden nimet ryhmitellään heidän nimensä ensimmäisen kirjaimen nousevaan järjestykseen. Sen jälkeen, toisessa kierrossa, heidän nimensä ryhmitellään heidän nimensä toisen kirjaimen nousevaan järjestykseen. Ja prosessi jatkuu, kunnes löydämme lajitellun luettelon.

terävä kulma

Katsotaan nyt Radix-lajittelun algoritmia.

Algoritmi

 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-lajittelualgoritmin toiminta

Katsotaan nyt, miten Radix-lajittelualgoritmi toimii.

Kantaluvun lajittelussa käytetyt vaiheet on lueteltu seuraavasti -

  • Ensin meidän on löydettävä suurin elementti (oletetaan max ) annetusta taulukosta. Olettaa 'x' on numeroiden lukumäärä max . The 'x' lasketaan, koska meidän täytyy käydä läpi kaikkien elementtien merkittävät paikat.
  • Käy sen jälkeen läpi yksitellen jokainen merkittävä paikka. Tässä meidän on käytettävä mitä tahansa vakaata lajittelualgoritmia lajitellaksesi kunkin merkittävän paikan numerot.

Katsotaan nyt kantalukulajittelun toimintaa yksityiskohtaisesti esimerkin avulla. Ymmärtääksesi sen selkeämmin, otetaan lajittelematon taulukko ja yritetään lajitella se kantalukulajittelulla. Se tekee selityksestä selkeämmän ja helpomman.

Radix-lajittelualgoritmi

Annetussa taulukossa suurin elementti on 736 joilla on 3 numeroita siinä. Joten silmukka kulkee jopa kolme kertaa (eli satojen paikka ). Tämä tarkoittaa, että taulukon lajittelemiseen tarvitaan kolme läpimenoa.

Lajittele nyt ensin elementit yksikköpaikkanumeroiden perusteella (esim. x = 0 ). Tässä käytämme laskenta-lajittelualgoritmia elementtien lajitteluun.

Passi 1:

Ensimmäisellä ajolla lista lajitellaan nollan kohdalla olevien numeroiden perusteella.

Radix-lajittelualgoritmi

Ensimmäisen läpimenon jälkeen taulukon elementit ovat -

Radix-lajittelualgoritmi

Passi 2:

Tässä välissä luettelo lajitellaan seuraavien merkitsevien numeroiden perusteella (eli numerot 10:ssäthpaikka).

Radix-lajittelualgoritmi

Toisen läpimenon jälkeen taulukon elementit ovat -

Radix-lajittelualgoritmi

Passi 3:

Tässä välissä luettelo lajitellaan seuraavien merkitsevien numeroiden perusteella (eli numerot 100:ssathpaikka).

valitse multi table sql
Radix-lajittelualgoritmi

Kolmannen ajon jälkeen taulukon elementit ovat -

Radix-lajittelualgoritmi

Nyt matriisi on lajiteltu nousevaan järjestykseen.

Radix-lajittelun monimutkaisuus

Katsotaan nyt Radix-lajittelun aikamonimutkaisuus parhaassa tapauksessa, keskimääräisessä tapauksessa ja pahimmassa tapauksessa. Näemme myös Radix-lajin avaruuden monimutkaisuuden.

1. Aika monimutkaisuus

Asia Aika monimutkaisuus
Paras tapaus Ω(n+k)
Keskimääräinen tapaus θ(nk)
Pahimmassa tapauksessa O(nk)
    Paras tapauksen monimutkaisuus -Se tapahtuu, kun lajittelua ei vaadita, eli matriisi on jo lajiteltu. Radix-lajittelun paras tapaus aika monimutkaisuus on Ω(n+k) .Keskimääräinen tapauksen monimutkaisuus -Se tapahtuu, kun taulukon elementit ovat sekaisin järjestyksessä, joka ei ole oikein nouseva eikä oikein laskeva. Radix-lajittelun tapauksen keskimääräinen aika monimutkaisuus on θ(nk) .Pahimman tapauksen monimutkaisuus -Se tapahtuu, kun taulukon elementit on lajiteltava käänteisessä järjestyksessä. Tämä tarkoittaa, että sinun on lajiteltava taulukon elementit nousevaan järjestykseen, mutta sen elementit ovat laskevassa järjestyksessä. Radix-lajittelun pahin aika monimutkaisuus on O(nk) .

Radix sort on ei-vertaileva lajittelualgoritmi, joka on parempi kuin vertailevat lajittelualgoritmit. Sillä on lineaarinen aikamonimutkaisuus, joka on parempi kuin vertailualgoritmit, joiden kompleksisuus on O(n logn).

2. Tilan monimutkaisuus

Avaruuden monimutkaisuus O(n + k)
Vakaa JOO
  • Radix-lajittelun avaruuden kompleksisuus on O(n + k).

Radix-lajittelun toteutus

Katsotaan nyt Radixin ohjelmien lajittelua eri ohjelmointikielillä.

Ohjelmoida: Kirjoita ohjelma Radix-lajittelun toteuttamiseksi C-kielellä.

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