logo

Algorytm sortowania radiacyjnego

W tym artykule omówimy algorytm sortowania Radix. Sortowanie radiacyjne to algorytm sortowania liniowego używany w przypadku liczb całkowitych. Sortowanie Radix polega na sortowaniu cyfra po cyfrze, rozpoczynającym się od cyfry najmniej znaczącej do cyfry najbardziej znaczącej.

Proces sortowania radix działa podobnie do sortowania nazwisk uczniów, według kolejności alfabetycznej. W tym przypadku istnieje 26 podstaw utworzonych z powodu 26 alfabetów w języku angielskim. W pierwszym przebiegu nazwiska uczniów grupowane są w kolejności rosnącej pierwszej litery ich imion. Następnie w drugim przebiegu ich nazwiska są grupowane według rosnącej kolejności drugiej litery ich imienia. Proces trwa, dopóki nie znajdziemy posortowanej listy.

konwersja ciągu na datę

Przyjrzyjmy się teraz algorytmowi sortowania Radix.

Algorytm

 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 

Działanie algorytmu sortowania Radix

Przyjrzyjmy się teraz działaniu algorytmu sortowania Radix.

Kroki stosowane w sortowaniu metodą podstawową są wymienione w następujący sposób:

  • Najpierw musimy znaleźć największy element (załóżmy, że maks ) z podanej tablicy. Przypuszczać 'X' będzie liczbą cyfr w maks . The 'X' jest obliczana, ponieważ musimy przejść przez znaczące miejsca wszystkich elementów.
  • Następnie przejdź kolejno przez każde istotne miejsce. W tym przypadku musimy użyć dowolnego stabilnego algorytmu sortowania, aby posortować cyfry każdego znaczącego miejsca.

Przyjrzyjmy się teraz szczegółowo działaniu sortowania radix na przykładzie. Aby to lepiej zrozumieć, weźmy nieposortowaną tablicę i spróbujmy ją posortować za pomocą sortowania radix. Dzięki temu wyjaśnienia będą jaśniejsze i łatwiejsze.

Algorytm sortowania radiacyjnego

W danej tablicy największym elementem jest 736 które mają 3 w nim cyfry. Zatem pętla wykona się maksymalnie trzy razy (tj miejsce setki ). Oznacza to, że do posortowania tablicy potrzebne są trzy przebiegi.

Teraz najpierw posortuj elementy na podstawie cyfr jednostkowych (tj. x = 0 ). Tutaj używamy algorytmu sortowania przez zliczanie do sortowania elementów.

Przejście 1:

W pierwszym przebiegu lista jest sortowana na podstawie cyfr na miejscu 0.

Algorytm sortowania radiacyjnego

Po pierwszym przejściu elementy tablicy są -

ciągi znaków na liczby całkowite
Algorytm sortowania radiacyjnego

Przejście 2:

W tym przebiegu lista jest sortowana na podstawie kolejnych znaczących cyfr (tj. cyfr na 10tmiejsce).

Algorytm sortowania radiacyjnego

Po drugim przejściu elementy tablicy są -

Algorytm sortowania radiacyjnego

Przejście 3:

W tym przebiegu lista jest sortowana na podstawie kolejnych cyfr znaczących (tj. cyfr przy 100tmiejsce).

Algorytm sortowania radiacyjnego

Po trzecim przejściu elementy tablicy są -

Algorytm sortowania radiacyjnego

Teraz tablica jest posortowana rosnąco.

Złożoność sortowania radiacyjnego

Przyjrzyjmy się teraz złożoności czasowej sortowania Radix w najlepszym przypadku, średnim i najgorszym przypadku. Zobaczymy także złożoność przestrzenną sortowania Radix.

1. Złożoność czasowa

Sprawa Złożoność czasu
Najlepszy przypadek Ω(n+k)
Przeciętny przypadek θ(nk)
Najgorszy przypadek O(nk)
    Najlepsza złożoność przypadku —Występuje, gdy nie jest wymagane sortowanie, czyli tablica jest już posortowana. W najlepszym przypadku złożoność czasowa sortowania radiacyjnego wynosi Ω(n+k) .Średnia złożoność przypadku —Dzieje się tak, gdy elementy tablicy są w pomieszanej kolejności, która nie jest prawidłowo rosnąca i nieprawidłowo malejąca. Średnia złożoność czasowa sortowania Radix wynosi θ(nk) .Najgorsza złożoność przypadku —Występuje, gdy elementy tablicy muszą zostać posortowane w odwrotnej kolejności. Oznacza to, że załóżmy, że musisz posortować elementy tablicy w kolejności rosnącej, ale jej elementy są w kolejności malejącej. Najgorsza złożoność czasowa sortowania Radix to O(nk) .

Sortowanie radiacyjne to algorytm sortowania nieporównawczego, który jest lepszy od algorytmów sortowania porównawczego. Ma liniową złożoność czasową, która jest lepsza niż algorytmy porównawcze o złożoności O(n logn).

2. Złożoność przestrzeni

Złożoność przestrzeni O(n + k)
Stabilny TAK
  • Złożoność przestrzenna sortowania Radix wynosi O (n + k).

Implementacja sortowania Radix

Przyjrzyjmy się teraz programom Radixa sortującym w różnych językach programowania.

Program: Napisz program realizujący sortowanie Radix w języku 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;>