I denne artikel vil vi diskutere Radix-sorteringsalgoritmen. Radix sort er den lineære sorteringsalgoritme, der bruges til heltal. I Radix sortering er der ciffer for ciffer sortering udføres, der startes fra det mindst betydende ciffer til det mest betydende ciffer.
Processen med radix-sortering fungerer på samme måde som sorteringen af elevernes navne i henhold til den alfabetiske rækkefølge. I dette tilfælde er der 26 radix dannet på grund af de 26 alfabeter på engelsk. I det første pas er elevernes navne grupperet efter den stigende rækkefølge af det første bogstav i deres navne. Derefter, i den anden omgang, grupperes deres navne efter den stigende rækkefølge af det andet bogstav i deres navn. Og processen fortsætter, indtil vi finder den sorterede liste.
java-date nu
Lad os nu se Radix-sorteringsalgoritmen.
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
Arbejde med Radix sorteringsalgoritme
Lad os nu se, hvordan Radix-sorteringsalgoritmen fungerer.
De trin, der bruges i sorteringen af radix-sortering, er angivet som følger -
- Først skal vi finde det største element (antag max ) fra det givne array. Formode 'x' være antallet af cifre i max . Det 'x' er beregnet, fordi vi skal gennemgå de væsentlige steder for alle elementer.
- Derefter skal du gennemgå et efter et hvert væsentligt sted. Her er vi nødt til at bruge enhver stabil sorteringsalgoritme til at sortere cifrene for hvert signifikant sted.
Lad os nu se, hvordan radix-sortering fungerer i detaljer ved at bruge et eksempel. For at forstå det mere klart, lad os tage et usorteret array og prøve at sortere det ved hjælp af radix sort. Det vil gøre forklaringen klarere og lettere.
I det givne array er det største element 736 det har 3 cifre i den. Så løkken vil løbe op til tre gange (dvs. til hundrede sted ). Det betyder, at der kræves tre gennemløb for at sortere arrayet.
Sorter nu først elementerne på basis af enhedspladscifre (dvs. x = 0 ). Her bruger vi tællesorteringsalgoritmen til at sortere elementerne.
Beståelse 1:
I det første gennemløb er listen sorteret på baggrund af cifrene på 0's plads.
Efter den første gennemgang er array-elementerne -
Beståelse 2:
I dette pas er listen sorteret på basis af de næste signifikante cifre (dvs. cifre ved 10thplacere).
Efter den anden gennemgang er array-elementerne -
Beståelse 3:
I dette pas er listen sorteret på basis af de næste signifikante cifre (dvs. cifre ved 100thplacere).
Efter det tredje gennemløb er array-elementerne -
Nu er arrayet sorteret i stigende rækkefølge.
Radix sorterer kompleksitet
Lad os nu se tidskompleksiteten af Radix-sortering i bedste tilfælde, gennemsnitligt tilfælde og værste tilfælde. Vi vil også se rumkompleksiteten af Radix sort.
1. Tidskompleksitet
Sag | Tidskompleksitet |
---|---|
Bedste sag | Ω(n+k) |
Gennemsnitlig tilfælde | θ(nk) |
Worst Case | O(nk) |
Radix sort er en ikke-komparativ sorteringsalgoritme, der er bedre end de komparative sorteringsalgoritmer. Den har lineær tidskompleksitet, der er bedre end de komparative algoritmer med kompleksitet O(n logn).
2. Rumkompleksitet
Rumkompleksitet | O(n + k) |
Stabil | JA |
- Rumkompleksiteten af Radix-sortering er O(n + k).
Implementering af Radix sort
Lad os nu se Radix' programmer sortere på forskellige programmeringssprog.
kruskals algoritme
Program: Skriv et program til at implementere Radix sort i C-sprog.
#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'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;>