logo

Számláló rendezési algoritmus

Ebben a cikkben a számlálási rendezési algoritmust tárgyaljuk. A számláló rendezés egy olyan rendezési technika, amely meghatározott tartományok közötti kulcsokon alapul. A szoftvermérnökök számára készített kódolási vagy technikai interjúk során széles körben felteszik a kérdést a rendezési algoritmusoknak. Ezért fontos a téma megvitatása.

Ez a rendezési technika nem végez elemek összehasonlításával történő rendezést. A rendezést úgy hajtja végre, hogy megszámolja a különböző kulcsértékekkel rendelkező objektumokat, mint például a hash. Ezt követően végrehajt néhány aritmetikai műveletet, hogy kiszámítsa az egyes objektumok indexpozícióját a kimeneti sorozatban. A számláló rendezést nem használják általános célú rendezési algoritmusként.

A számláló rendezés akkor hatásos, ha a tartomány nem nagyobb, mint a rendezendő objektumok száma. Használható a negatív bemeneti értékek rendezésére.

Most pedig lássuk a számolási rendezés algoritmusát.

Algoritmus

 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 

Számláló rendezési algoritmus működése

Most pedig lássuk a számláló rendezési algoritmus működését.

ha különben bash

A számláló rendezési algoritmus működésének megértéséhez vegyünk egy rendezetlen tömböt. Egy példán keresztül könnyebb lesz megérteni a számlálási rendezést.

Legyen a tömb elemei -

Számláló rendezés

1. Keresse meg az adott tömbből a maximális elemet! Hadd max legyen a maximális elem.

java kivételkezelés
Számláló rendezés

2. Most inicializálja a hosszúságú tömböt max + 1 amelynek mind a 0 eleme van. Ez a tömb az adott tömb elemeinek számának tárolására szolgál.

Számláló rendezés

3. Most el kell tárolnunk az egyes tömbelemek számát a megfelelő indexen a count tömbben.

Egy elem száma a következőképpen kerül tárolásra: - Tegyük fel, hogy a '4' tömbelem kétszer jelenik meg, tehát a 4-es elem száma 2. Így a 2 a 4-ben van tárolva.tha számlálótömb pozíciója. Ha bármely elem nem szerepel a tömbben, tegye a 0-t, azaz tegyük fel, hogy a '3' elem nincs a tömbben, így a 0 a 3-ban lesz tárolvardpozíció.

hogyan lehet zenét letölteni
Számláló rendezés
Számláló rendezés

Most tárolja a kumulatív összegét számol tömbelemek. Segít az elemeket a rendezett tömb megfelelő indexére helyezni.

Számláló rendezés
Számláló rendezés

Hasonlóképpen, a count tömb összesített száma -

Számláló rendezés

4. Most keresse meg az eredeti tömb minden elemének indexét

Számláló rendezés

Miután az elemet a helyére helyezte, csökkentse a számát eggyel. A 2. elem elhelyezése előtt a száma 2 volt, de a megfelelő pozícióba helyezés után a 2. elem új száma 1.

Számláló rendezés

Hasonlóképpen a rendezés után a tömb elemei:

Számláló rendezés

Most a tömb teljesen rendezve van.

multiplexer

A rendezés bonyolultságának számolása

Most lássuk a számlálási rendezés időbeli összetettségét legjobb, átlagos és legrosszabb esetben. Látni fogjuk a számolási rendezés térbeli összetettségét is.

1. Időbonyolultság

Ügy Idő Bonyolultság
Legjobb eset O(n + k)
Átlagos eset O(n + k)
Legrosszabb esetben O(n + k)
    Legjobb eset összetettsége –Akkor fordul elő, ha nincs szükség rendezésre, azaz a tömb már rendezve van. A számlálási rendezés legjobb eseti összetettsége az O(n + k) .Átlagos ügykomplexitás -Ez akkor fordul elő, ha a tömb elemei összekeveredett sorrendben vannak, ami nem megfelelően növekvő és nem megfelelően csökkenő sorrendben van. A számlálási rendezés átlagos esetidő-bonyolultsága a O(n + k) .A legrosszabb eset összetettsége -Ez akkor fordul elő, ha a tömbelemeket fordított sorrendben kell rendezni. Ez azt jelenti, hogy tegyük fel, hogy a tömb elemeit növekvő sorrendbe kell rendeznie, de az elemei csökkenő sorrendben vannak. A számlálási rendezés legrosszabb időbeli összetettsége az O(n + k) .

A számlálási rendezés időbeli összetettsége minden fenti esetben azonos. Ez azért van, mert az algoritmus átmegy n+k alkalommal, függetlenül attól, hogy az elemek hogyan helyezkednek el a tömbben.

A számlálási rendezés jobb, mint az összehasonlításon alapuló rendezési technikák, mivel a számlálási rendezésben nincs összehasonlítás az elemek között. De ha az egész számok nagyon nagyok, a számlálási rendezés rossz, mert ekkora tömböket kell létrehozni.

2. A tér összetettsége

A tér összetettsége O(max.)
Stabil IGEN
  • A számolási rendezés térkomplexitása O(max). Minél nagyobb az elemek köre, annál nagyobb a tér összetettsége.

Számláló rendezés megvalósítása

Most lássuk a számláló programok rendezését különböző programozási nyelveken.

Program: Írjon programot a számlálási rendezés megvalósítására C nyelven!

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

Kimenet

Számláló rendezés

Szóval ennyi a cikkről. Reméljük, hogy a cikk hasznos és informatív lesz az Ön számára.

városok Ausztráliában

Ez a cikk nem csak az algoritmusra korlátozódott. Megbeszéltük a rendezés bonyolultságának számlálását, a működést és a különböző programozási nyelveken történő megvalósítást is.