Straight selection sort
Het sorteeralgoritme straight selection sort zoekt in een lijst steeds de kleinste om die te verwisselen met het element dat volgt op het vorige dat bovenaan de lijst werd geplaatst.
Deze misschien wat cryptische omschrijving laat zich het beste illustreren met een voorbeeld: de rij DCBA wordt eerst door verwisseling van het eerste element D en het kleinste element A ACBD, daarna door verwisselen van het tweede element C en het kleinste resterende element B ABCD, en daarna verandert er niets meer.
Het aantal benodigde vergelijkingen bij een rij van lengte n is (n-1) + (n-2) + … + 1. Het aantal benodigde verwisselingen is maximaal n-1.
Implementaties
Implementatie in Java
Het onderstaand Java-codefragment sorteert de array asKey alfanumeriek op basis van Straight Selection:
for (int i= 0; i < asKey.length - 1; i++){
String sMin= asKey[i]; // kleinste string (voorlopig)
int iMin= i; // index van de kleinste string
for (int j= i + 1; j < asKey.length; j++){
if (asKey[j].compareTo(sMin) < 0){
sMin= asKey[j];
iMin= j;
}
}
if (iMin != i){
/* de kleinste string staat niet op plaats i maar verderop */
asKey[iMin]= asKey[i];
asKey[i]= sMin;
}
}
Implementatie in C
Een voorbeeld in C ("invoer" is de te sorteren array, "lengte" is het aantal elementen in de array):
void straightselection(int invoer[],int lengte){
int i,j,kleinste,tijdelijk;
for(j=0;j<lengte-1;j++){
kleinste=j;
for(i=j+1;i<lengte;i++){
if(invoer[i]<invoer[kleinste]) kleinste=i;
}
if(kleinste!=j){
tijdelijk=invoer[j];
invoer[j]=invoer[kleinste];
invoer[kleinste]=tijdelijk;
}
}
}
Implementatie in Python
In Python wordt dit:
Code
def selectionsort(rij):
for i in range(len(rij)):
min = i #Neem de eerste niet gesorteerde kaart als kleinste
for j in range(i, len(rij)): #Overloop de rest van de niet-gesorteerde kaarten
if rij[j]<rij[min]:
min = j #Is er een kleinere, zet dan zijn positie als minimum
rij[i], rij[min] = rij[min], rij[i] #Verwissel de i-de kaart met de kleinste kaart
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.