sorteeralgoritme vergelijking

sorteeralgoritmen zijn een belangrijk onderdeel van het beheren van gegevens. AtCprogramming.com, bieden wij tutorials voor het begrijpen van de belangrijkste encomconsortingtechnieken. Elk algoritme heeft bijzondere sterktes en zwakheden en in veel gevallen is het beste om gewoon de ingebouwde functie qsort te gebruiken. Voor tijden wanneer dit geen optie is of je gewoon een snel en vuil sorteeralgoritme nodig hebt, zijn er een verscheidenheid aan keuzes.


De meeste sorteeralgoritmen werken door de gesorteerde gegevens te vergelijken. In sommige gevallen kan het wenselijk zijn om een groot deel van de gegevens te sorteren (bijvoorbeeld een structuur met een naam en adres) op basis van slechts een deel van die gegevens.Het stuk gegevens dat daadwerkelijk wordt gebruikt om de gesorteerde volgorde te bepalen, wordt de sleutel genoemd.
sorteeralgoritmen worden meestal beoordeeld op hun efficiëntie. In dit geval,efficiëntie verwijst naar de algoritmische efficiëntie als de grootte van de input growslarge en is over het algemeen gebaseerd op het aantal elementen te sorteren. De meeste gebruikte algoritmen hebben een algoritmische efficiëntie van O (n^2) of o(n*log(n)). Een paar speciale geval algoritmen(een voorbeeld wordt genoemd in programmeren parels) kunnen bepaalde data sets sneller Sorteren dan O(n*log (n)). Dezealgorithmen zijn niet gebaseerd op het vergelijken van de items die worden gesorteerd en vertrouwen op grenzen. Er is aangetoond dat geen toetsvergelijkingsalgoritme beter kan presteren dan o(n*log(n)).
veel algoritmen die dezelfde efficiëntie hebben, hebben niet dezelfde snelheid op dezelfde input. Ten eerste moeten algoritmen worden beoordeeld op basis van hun gemiddelde case -, best case-en worst case-efficiëntie. Sommige algoritmen,zoals quick sort, presteren uitzonderlijk goed voor sommige ingangen, maar verschrikkelijk voor anderen. Anderealgorithmen, zoals merge sort, worden niet beïnvloed door de volgorde van invoergegevens.Zelfs een aangepaste versie van bubble sort kan eindigen in O (n) voor de meest favoriete ingangen.een tweede factor is de “constante term”. Omdat big-O-notatie veel van de details van een proces abstraheert, is het heel nuttig om naar de Big-O-notatie te kijken. Maar één ding dat wegvalt is de constante voor de expressie: bijvoorbeeld, O(c*n) is gewoon O (n). In de echte wereld, deconstant, c, zal variëren tussen verschillende algoritmen. Een goed uitgevoerde QuickSort moet een veel kleinere constante multiplier dan heap sort hebben.
Een tweede criterium voor het beoordelen van algoritmen is hun ruimte-vereiste — hebben ze krasruimte nodig of kan de array op zijn plaats worden gesorteerd (zonder extra geheugen buiten een paar variabelen)? Sommige algoritmen vereisen nooit extra ruimte, terwijl sommige het gemakkelijkst te begrijpen zijn wanneer geà mplementeerdextra ruimte (heap sorteren, bijvoorbeeld, kan op zijn plaats worden gedaan, maar conceptueelhet is veel gemakkelijker om te denken van een aparte heap). Spatievereisten kunnen evendepend op de gebruikte gegevensstructuur (samenvoegen Sorteer op arrays versus samenvoegen Sorteer op gelinkte lijsten, bijvoorbeeld).
Een derde criterium is stabiliteit — behoudt de sort de volgorde van sleutels met gelijke waarden? De meeste eenvoudige soorten doen dit, maar sommige soorten, zoals asheap sort, niet.
De volgende grafiek vergelijkt sorteeralgoritmen op de verschillende hierboven beschreven criteria; de algoritmen met hogere constante termen verschijnen eerst, hoewel dit duidelijk een implementatieafhankelijk concept is en alleen als een ruwe gids moet worden genomen bij het kiezen tussen soorten van dezelfde big-O efficiëntie.

Time
Sort Average Best Worst Space Stability Remarks
Bubble sort O(n^2) O(n^2) O(n^2) Constant Stable Always use a modified bubble sort
Modified Bubble sort O(n^2) O(n) O(n^2) Constant Stable Stops after reaching a sorted array
Selection Sort O(n^2) O(n^2) O(n^2) Constante Stabiel Zelfs een perfect gesorteerd input vereist het scannen van de hele array
Insertion Sort O(n^2) O(n) O(n^2) Constante Stabiel In het beste geval (al gesorteerd is, elke plaats vereist een constante tijd
Heap Sorteren O(n*log(n)) O(n*log(n)) O(n*log(n)) Constante Instabiel met behulp van input-array als opslag voor de hoop, is het mogelijk om constant de ruimte
Merge Sort o(n*log(n)) O(n*log(n)) hangt af van stabiel van arrays, samenvoegen vereist o(n) spatie; op gekoppelde lijsten, samenvoegen vereist constante spatie
Quicksort o(n*log(n)) o(n*log(n)) o(n^2) constant stabiel willekeurig kiezen van een pivot waarde(of shuffling de array voorafgaand aan het sorteren) kan helpen worst case scenario ‘ s zoals een perfect gesorteerde array te voorkomen.



Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.