logo

Algoritam sortiranja brojanjem

U ovom ćemo članku raspravljati o algoritmu sortiranja brojanjem. Sortiranje brojanjem je tehnika sortiranja koja se temelji na ključevima između određenih raspona. U programskim ili tehničkim intervjuima za softverske inženjere često se postavljaju pitanja o algoritmima sortiranja. Dakle, važno je razgovarati o temi.

Ova tehnika sortiranja ne izvodi sortiranje usporedbom elemenata. Izvodi razvrstavanje prebrojavanjem objekata koji imaju različite ključne vrijednosti poput raspršivanja. Nakon toga izvodi neke aritmetičke operacije kako bi izračunao poziciju indeksa svakog objekta u izlaznom nizu. Sortiranje brojanjem ne koristi se kao algoritam sortiranja opće namjene.

Sortiranje brojanjem učinkovito je kada raspon nije veći od broja objekata koji se sortiraju. Može se koristiti za sortiranje negativnih ulaznih vrijednosti.

do i while petlja u Javi

Pogledajmo sada algoritam sortiranja brojanjem.

Algoritam

 countingSort(array, n) // 'n' is the size of array max = find maximum element in the given array create count array with size maximum + 1 Initialize count array with all 0's for i = 0 to n find the count of every unique element and store that count at ith position in the count array for j = 1 to max Now, find the cumulative sum and store it in count array for i = n to 1 Restore the array elements Decrease the count of every restored element by 1 end countingSort 

Rad algoritma sortiranja brojanjem

Sada, da vidimo kako radi algoritam sortiranja brojanjem.

Da bismo razumjeli rad algoritma sortiranja brojanjem, uzmimo nesortirani niz. Razvrstavanje brojanjem bit će lakše razumjeti na primjeru.

Neka su elementi niza -

Razvrstavanje brojanjem

1. Pronađite najveći element iz zadanog niza. Neka max biti maksimalni element.

Razvrstavanje brojanjem

2. Sada inicijalizirajte polje duljine maksimalno + 1 imajući svih 0 elemenata. Ovaj niz će se koristiti za pohranjivanje broja elemenata u danom nizu.

Razvrstavanje brojanjem

3. Sada moramo pohraniti broj svakog elementa niza na odgovarajući indeks u nizu brojača.

Broj elementa bit će pohranjen kao - Pretpostavimo da se element polja '4' pojavljuje dva puta, tako da je broj elementa 4 2. Dakle, 2 je pohranjen na 4thpoložaj niza brojača. Ako bilo koji element nije prisutan u nizu, stavite 0, tj. pretpostavimo da element '3' nije prisutan u nizu, pa će 0 biti pohranjen na 3rdpoložaj.

Razvrstavanje brojanjem
Razvrstavanje brojanjem

Sada pohranite kumulativni zbroj od računati elementi niza. Pomoći će postaviti elemente na točan indeks sortiranog niza.

Razvrstavanje brojanjem
Razvrstavanje brojanjem

Slično tome, kumulativni broj niza brojanja je -

Razvrstavanje brojanjem

4. Sada pronađite indeks svakog elementa izvornog niza

Razvrstavanje brojanjem

Nakon postavljanja elementa na njegovo mjesto, smanjite njegov broj za jedan. Prije postavljanja elementa 2, njegov broj je bio 2, ali nakon postavljanja na ispravnu poziciju, novi broj za element 2 je 1.

Razvrstavanje brojanjem

Slično, nakon sortiranja, elementi niza su -

Razvrstavanje brojanjem

Sada je niz potpuno sortiran.

Brojanje složenosti sortiranja

Sada, da vidimo vremensku složenost sortiranja brojanja u najboljem slučaju, prosječnom slučaju iu najgorem slučaju. Također ćemo vidjeti složenost prostora sortiranja brojanjem.

1. Vremenska složenost

Slučaj Vrijeme Složenost
Najbolji slučaj O(n + k)
Prosječan slučaj O(n + k)
Najgori slučaj O(n + k)
    Složenost u najboljem slučaju -To se događa kada nije potrebno sortiranje, tj. niz je već sortiran. Najbolja vremenska složenost sortiranja brojanja je O(n + k) .Prosječna složenost slučaja -To se događa kada su elementi niza u zbrkanom redoslijedu koji nije ispravno uzlazan i nije ispravno silazni. Prosječna složenost slučaja sortiranja brojanja je O(n + k) .Složenost u najgorem slučaju -To se događa kada se elementi niza moraju sortirati obrnutim redoslijedom. To znači da pretpostavimo da morate sortirati elemente niza uzlaznim redoslijedom, ali njegovi elementi su u silaznom redoslijedu. Vremenska složenost sortiranja brojanja u najgorem slučaju je O(n + k) .

U svim gore navedenim slučajevima, vremenska složenost sortiranja brojanja je ista. To je zato što algoritam prolazi n+k puta, bez obzira na to kako su elementi postavljeni u nizu.

Sortiranje brojanjem je bolje od tehnika sortiranja temeljenih na usporedbi jer nema usporedbe između elemenata u sortiranju brojanjem. Ali, kada su cijeli brojevi jako veliki, sortiranje brojanjem je loše jer se moraju kreirati nizovi te veličine.

2. Složenost prostora

Složenost prostora O (maks.)
Stabilan DA
  • Prostorna složenost sortiranja brojanjem je O(max). Što je veći raspon elemenata, to je veća složenost prostora.

Implementacija sortiranja brojanjem

Pogledajmo sada programe sortiranja brojanjem u različitim programskim jezicima.

Program: Napišite program za implementaciju sortiranja brojanjem u C jeziku.

 #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 countSort(int a[], int n) // function to perform counting sort { int output[n+1]; int max = getMax(a, n); int count[max+1]; //create count array with size [max+1] for (int i = 0; i <= max; ++i) { count[i]="0;" initialize count array with all zeros } for (int i="0;" < n; i++) store the of each element count[a[i]]++; for(int i<="max;" +="count[i-1];" find cumulative frequency * this loop will index original in array, and place elements output array* - 1;>= 0; i--) { output[count[a[i]] - 1] = a[i]; count[a[i]]--; // decrease count for same numbers } for(int i = 0; i<n; 16 i++) { a[i]="output[i];" store the sorted elements into main array } void printarr(int a[], int n) * function to print i; for (i="0;" i < n; printf('%d ', a[i]); main() a[]="{" 11, 30, 24, 7, 31, }; n="sizeof(a)/sizeof(a[0]);" printf('before sorting are - 
'); printarr(a, n); countsort(a, printf('
after return 0; pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/93/counting-sort-algorithm-12.webp" alt="Counting Sort"> <p> <strong>Program:</strong> Write a program to implement counting 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 countSort(int a[], int n) // function to perform counting sort { int output[n+1]; int max = getMax(a, n); int count[max+1]; //create count array with size [max+1] for (int i = 0; i <= max; ++i) { count[i]="0;" initialize count array with all zeros } for (int i="0;" < n; i++) store the of each element count[a[i]]++; for(int i<="max;" +="count[i-1];" find cumulative frequency * this loop will index original in array, and place elements output array* - 1;>= 0; i--) { output[count[a[i]] - 1] = a[i]; count[a[i]]--; // decrease count for same numbers } for(int i = 0; i<n; 11 i++) { a[i]="output[i];" store the sorted elements into main array } void printarr(int a[], int n) * function to print i; for (i="0;" i < n; cout< <a[i]<<' '; main() a[]="{" 31, 11, 42, 7, 30, }; n="sizeof(a)/sizeof(a[0]);" cout<<'before sorting are - 
'; printarr(a, n); countsort(a, cout<<'
after return 0; pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/93/counting-sort-algorithm-13.webp" alt="Counting Sort"> <p> <strong>Program:</strong> Write a program to implement counting sort in C#.</p> <pre> using System; class CountingSort { 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 countSort(int[] a, int n) // function to perform counting sort { int[] output = new int [n+1]; int max = getMax(a, n); int[] count = new int [max+1]; //create count array with size [max+1] for (int i = 0; i <= max; ++i) { count[i]="0;" initialize count array with all zeros } for (int i="0;" < n; i++) store the of each element count[a[i]]++; for(int i<="max;" +="count[i-1];" find cumulative frequency * this loop will index original in array, and place elements output array* - 1;>= 0; i--) { output[count[a[i]] - 1] = a[i]; count[a[i]]--; // decrease count for same numbers } for(int i = 0; i<n; 3 i++) { a[i]="output[i];" store the sorted elements into main array } static void printarr(int[] a, int n) * function to print i; for (i="0;" i < n; console.write(a[i] + ' '); main() int[] a="{" 43, 31, 2, 7, 10, 1, 5, 6, }; n="a.Length;" console.write('before sorting are - 
'); printarr(a,n); countsort(a,n); console.write('
after pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/93/counting-sort-algorithm-14.webp" alt="Counting Sort"> <p> <strong>Program:</strong> Write a program to implement counting sort in Java.</p> <pre> class CountingSort { 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 countSort(int[] a, int n) // function to perform counting sort { int[] output = new int [n+1]; int max = getMax(a, n); //int max = 42; int[] count = new int [max+1]; //create count array with size [max+1] for (int i = 0; i <= max; ++i) { count[i]="0;" initialize count array with all zeros } for (int i="0;" < n; i++) store the of each element count[a[i]]++; for(int i<="max;" +="count[i-1];" find cumulative frequency * this loop will index original in array, and place elements output array* - 1;>= 0; i--) { output[count[a[i]] - 1] = a[i]; count[a[i]]--; // decrease count for same numbers } for(int i = 0; i<n; 41 i++) { a[i]="output[i];" store the sorted elements into main array } * function to print void printarray(int a[], int n) i; for (i="0;" i < n; system.out.print(a[i] + ' '); public static main(string args[]) a[]="{" 11, 30, 24, 7, 31, 16, 39, }; n="a.length;" countingsort c1="new" countingsort(); system.out.println('
before sorting are - c1.printarray(a, n); c1.countsort(a,n); system.out.println('
after system.out.println(); pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/93/counting-sort-algorithm-15.webp" alt="Counting Sort"> <p> <strong>Program:</strong> Write a program to implement counting sort in PHP.</p> <pre> <?php function getMax($a, $n) { $max = $a[0]; for($i = 1; $i $max) $max = $a[$i]; } return $max; //maximum element from the array } function countSort(&$a, $n) // function to perform counting sort { $LeftArray = array($n + 1); $max = getMax($a, $n); $count = array($max + 1); //create count array with size [max+1] for ($i = 0; $i <= $max; ++$i) { $count[$i] = 0; // Initialize count array with all zeros } for ($i = 0; $i < $n; $i++) // Store the count of each element { $count[$a[$i]]++; } for($i = 1; $i= 0; $i--) { $output[$count[$a[$i]] - 1] = $a[$i]; $count[$a[$i]]--; // decrease count for same numbers } for($i = 0; $i<$n; $i++) { $a[$i] = $output[$i]; //store the sorted elements into main array } } /* Function to print the array elements */ function printArray($a, $n) { for($i = 0; $i < $n; $i++) { print_r($a[$i]); echo ' '; } } $a = array( 9, 28, 22, 5, 29, 14, 37, 28, 9 ); $n = count($a); echo 'Before sorting array elements are - <br>&apos;; printArray($a, $n); countSort($a,$n); echo &apos; <br> After sorting array elements are - <br>&apos;; printArray($a, $n); ?&gt; </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/93/counting-sort-algorithm-16.webp" alt="Counting Sort"> <p>So, that&apos;s all about the article. Hope the article will be helpful and informative to you.</p> <p>This article was not only limited to the algorithm. We have also discussed counting sort complexity, working, and implementation in different programming languages.</p> <hr></n;></=></pre></n;></=></pre></n;></=></pre></n;></=>

Izlaz

kako ubaciti lažnu apstraktnu klasu
Razvrstavanje brojanjem

Dakle, to je sve o članku. Nadamo se da će vam članak biti koristan i informativan.

Ovaj članak nije bio ograničen samo na algoritam. Također smo razgovarali o brojanju složenosti sortiranja, radu i implementaciji u različitim programskim jezicima.