logo

Radix sorteringsalgoritme

I denne artikkelen vil vi diskutere Radix-sorteringsalgoritmen. Radix sort er den lineære sorteringsalgoritmen som brukes for heltall. I Radix sortering er det siffer for siffer sortering utføres som startes fra det minst signifikante sifferet til det mest signifikante sifferet.

Prosessen med radix-sortering fungerer på samme måte som sorteringen av elevers navn, i henhold til alfabetisk rekkefølge. I dette tilfellet er det 26 radix dannet på grunn av de 26 alfabetene på engelsk. I det første passet blir navnene på elevene gruppert i henhold til stigende rekkefølge på den første bokstaven i navnene deres. Etter det, i det andre passet, blir navnene deres gruppert i henhold til den stigende rekkefølgen til den andre bokstaven i navnet deres. Og prosessen fortsetter til vi finner den sorterte listen.

linux mint kanel vs mate

La oss nå se algoritmen til Radix-sortering.

Algoritme

 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 

Arbeid av Radix-sortalgoritmen

La oss nå se hvordan Radix-sorteringsalgoritmen fungerer.

Trinnene som brukes i sorteringen av radix-sortering er listet opp som følger -

  • Først må vi finne det største elementet (anta maks ) fra den gitte matrisen. Anta 'x' være antall sifre i maks . De 'x' er beregnet fordi vi trenger å gå gjennom de betydelige stedene for alle elementer.
  • Etter det, gå gjennom en etter en hvert viktig sted. Her må vi bruke en hvilken som helst stabil sorteringsalgoritme for å sortere sifrene til hvert betydelig sted.

La oss nå se hvordan radix-sortering fungerer i detalj ved å bruke et eksempel. For å forstå det klarere, la oss ta en usortert matrise og prøve å sortere den ved hjelp av radix sort. Det vil gjøre forklaringen klarere og enklere.

Radix sorteringsalgoritme

I den gitte matrisen er det største elementet 736 som har 3 sifre i den. Så løkken vil løpe opptil tre ganger (dvs. til hundrevis plass ). Det betyr at tre passeringer kreves for å sortere matrisen.

Sorter nå elementene på grunnlag av enhetsplasseringssifre (dvs. x = 0 ). Her bruker vi tellesorteringsalgoritmen for å sortere elementene.

Pass 1:

I første pass sorteres listen på grunnlag av sifrene på 0-plassen.

Radix sorteringsalgoritme

Etter den første passeringen er array-elementene -

Radix sorteringsalgoritme

Pass 2:

I dette passet blir listen sortert på grunnlag av de neste signifikante sifrene (dvs. sifrene ved 10thplass).

Radix sorteringsalgoritme

Etter den andre passeringen er matriseelementene -

Radix sorteringsalgoritme

Pass 3:

I dette passet blir listen sortert på grunnlag av de neste signifikante sifrene (dvs. sifrene ved 100thplass).

Radix sorteringsalgoritme

Etter den tredje passeringen er array-elementene -

Radix sorteringsalgoritme

Nå er matrisen sortert i stigende rekkefølge.

Radix sortere kompleksitet

La oss nå se tidskompleksiteten til Radix-sortering i beste tilfelle, gjennomsnittlig tilfelle og verste tilfelle. Vi vil også se romkompleksiteten til Radix sort.

1. Tidskompleksitet

Sak Tidskompleksitet
Beste sak Ω(n+k)
Gjennomsnittlig sak θ(nk)
Worst Case O(nk)
    Best case kompleksitet -Det oppstår når det ikke er behov for sortering, det vil si at matrisen allerede er sortert. Den beste tidskompleksiteten til Radix-sortering er Ω(n+k) .Gjennomsnittlig sakskompleksitet -Det oppstår når array-elementene er i rotete rekkefølge som ikke er riktig stigende og ikke riktig synkende. Den gjennomsnittlige sakstidskompleksiteten til Radix-sortering er θ(nk) .Worst Case Complexity -Det oppstår når array-elementene må sorteres i omvendt rekkefølge. Det betyr at du må sortere array-elementene i stigende rekkefølge, men elementene er i synkende rekkefølge. Den verste tidskompleksiteten til Radix-sortering er O(nk) .

Radix sort er en ikke-komparativ sorteringsalgoritme som er bedre enn de komparative sorteringsalgoritmene. Den har lineær tidskompleksitet som er bedre enn de komparative algoritmene med kompleksitet O(n logn).

2. Romkompleksitet

Plass kompleksitet O(n + k)
Stabil JA
  • Romkompleksiteten til Radix-sortering er O(n + k).

Implementering av Radix sort

La oss nå se programmene til Radix sortere på forskjellige programmeringsspråk.

kruskals algoritme

Program: Skriv et program for å implementere Radix sort i C-språk.

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