logo

Tellesorteringalgoritme

I denne artikkelen vil vi diskutere tellesorteringsalgoritmen. Tellesortering er en sorteringsteknikk som er basert på nøklene mellom spesifikke områder. I koding eller tekniske intervjuer for programvareingeniører er det mye spørsmål om sorteringsalgoritmer. Så det er viktig å diskutere temaet.

Denne sorteringsteknikken utfører ikke sortering ved å sammenligne elementer. Den utfører sortering ved å telle objekter med distinkte nøkkelverdier som hashing. Etter det utfører den noen aritmetiske operasjoner for å beregne hvert objekts indeksposisjon i utdatasekvensen. Tellesortering brukes ikke som en generell sorteringsalgoritme.

polymorfisme i java

Tellesortering er effektiv når rekkevidden ikke er større enn antall objekter som skal sorteres. Den kan brukes til å sortere de negative inngangsverdiene.

La oss nå se algoritmen for tellesortering.

Algoritme

 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 

Arbeid med tellesortalgoritme

La oss nå se hvordan tellesortalgoritmen fungerer.

For å forstå hvordan tellesorteringsalgoritmen fungerer, la oss ta en usortert matrise. Det vil være lettere å forstå tellesorten via et eksempel.

La elementene i array være -

Tellesortering

1. Finn det maksimale elementet fra den gitte matrisen. La maks være det maksimale elementet.

Tellesortering

2. Initialiser nå array of length maks + 1 har alle 0 elementer. Denne matrisen vil bli brukt til å lagre tellingen av elementene i den gitte matrisen.

Tellesortering

3. Nå må vi lagre tellingen til hvert array-element ved deres tilsvarende indeks i count-arrayet.

Antallet av et element vil bli lagret som - Anta at array-elementet '4' vises to ganger, så antallet av element 4 er 2. Derfor er 2 lagret ved 4-enthposisjonen til tellematrisen. Hvis et element ikke er til stede i matrisen, plasser 0, dvs. anta at element '3' ikke er til stede i matrisen, så vil 0 bli lagret på 3rdposisjon.

bash for loop 1 til 10
Tellesortering
Tellesortering

Lagre nå den kumulative summen av telle array-elementer. Det vil hjelpe å plassere elementene på riktig indeks for den sorterte matrisen.

Tellesortering
Tellesortering

På samme måte er det kumulative antallet av tellematrisen -

Tellesortering

4. Finn nå indeksen til hvert element i den opprinnelige matrisen

Tellesortering

Etter å ha plassert elementet på plass, reduser antallet med én. Før element 2 ble plassert var tellingen 2, men etter å ha plassert den i riktig posisjon, er den nye tellingen for element 2 1.

Tellesortering

På samme måte, etter sortering, er matriseelementene -

Tellesortering

Nå er matrisen fullstendig sortert.

pyspark veiledning

Telle sorterings kompleksitet

La oss nå se tidskompleksiteten ved å telle sortering i beste tilfelle, gjennomsnittlig tilfelle og i verste fall. Vi vil også se plasskompleksiteten til tellesorten.

1. Tidskompleksitet

Sak Tid Kompleksitet
Beste sak O(n + k)
Gjennomsnittlig sak O(n + k)
Worst Case O(n + k)
    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 ved å telle sortering er O(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 for tellesort er O(n + k) .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 ved å telle sortering er O(n + k) .

I alle ovennevnte tilfeller er tidskompleksiteten for tellesortering den samme. Dette er fordi algoritmen går gjennom n+k ganger, uavhengig av hvordan elementene er plassert i matrisen.

mia khalifa alder

Tellesortering er bedre enn de sammenligningsbaserte sorteringsteknikkene fordi det ikke er noen sammenligning mellom elementer i tellesortering. Men når heltallene er veldig store, er tellesorteringen dårlig fordi matriser av den størrelsen må opprettes.

2. Romkompleksitet

Plass kompleksitet O(maks)
Stabil JA
  • Romkompleksiteten til å telle sortering er O(maks). Jo større spekter av elementer, desto større plasskompleksitet.

Gjennomføring av tellesort

La oss nå se tellingsprogrammene på forskjellige programmeringsspråk.

Program: Skriv et program for å implementere tellesortering 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 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;></=>

Produksjon

Tellesortering

Så det handler om artikkelen. Håper artikkelen vil være nyttig og informativ for deg.

Denne artikkelen var ikke bare begrenset til algoritmen. Vi har også diskutert telling av sorteringskompleksitet, arbeid og implementering i forskjellige programmeringsspråk.