Die Webseiten der Fachschaft Informatik am ERG Saalfeld
Selection-Sort
Selection-Sort ist "in-place" und die Anzahl der Elemente bleibt erhalten.
Beispiel:
| Das unsortierte Feld: |
2 5 9 8 1 5 2 4 |
Wir suchen in dem Feld das größte Element.
| Das größte Element wurde mit dem letzten Element des aktuellen Feldes getauscht. |
2 5 4 8 1 5 2 9 |
Da das größte Element an der letzten Stelle steht, betrachten wird dieses Element nicht mehr. Das nun betrachtete aktuelle Feld ist um ein Element kleiner.
| Das größte Element im aktuellen Feld wurde mit dem letzten Element dieses Feldes getauscht. |
2 5 4 2 1 5 8 9 |
Die beiden größten Elemente stehen an der richtigen Stelle. Das zu betrachtende Feld = aktuelles Feld wird wieder um ein Element kleiner.
| Hier wird nicht getauscht, weil (zufällig) das größte Element an der letzten Stelle im aktuellen Feld steht. |
2 5 4 2 1 5 8 9 |
usw.
| Das größte Element im aktuellen Feld wurde wieder mit dem letzten Element dieses Feldes getauscht. |
2 1 4 2 5 5 8 9 |
| Das größte Element im aktuellen Feld wurde wieder mit dem letzten Element dieses Feldes getauscht. |
2 1 2 4 5 5 8 9 |
| Hier wird nicht getauscht, weil das größte Element an der letzten Stelle im aktuellen Feld steht. |
2 1 2 4 5 5 8 9 |
| Das größte Element im aktuellen Feld wurde mit dem letzten Element dieses Feldes getauscht. |
1 2 2 4 5 5 8 9 |
fertig
Das Programm zum Sortieren mit Selection-Sort sieht so aus:
Programm
from random import randint
#Wir erstellen/würfeln ein Feld
feld = []
for a in range(100):
feld.append(randint(200,500))
#Ausgabe des unsortierten Felds
for element in feld:
print(element,end = ' ')
print('\n')
#wir sortieren mit Selection-Sort
anzahl = len(feld)
feldende = anzahl
for j in range(anzahl):
max = -100000
stelle = -1
feldende = feldende - 1
#Wir suchen in dem Feld von feld[0] bis feld[feldende] die groesste Zahl
for i in range (feldende+1):
if feld[i]>max:
max = feld[i]
stelle = i
#Wir tauschen das groesste Element mit dem Element an der letzen Stelle
help = feld[feldende]
feld[feldende] = max
feld[stelle] = help
#Ausgabe des sortierten Felds
for element in feld:
print(element, end = ' ')
Der Aufruf sah bei mir so aus:

Aufgaben
- Bringen Sie das Programm zum Laufen.
- Kommentieren Sie die Zeilen 16 bis 30.
- Ändern Sie das Programm so, dass die Anzahl der Elemente als Parameter übergeben wird.
- Ändern Sie das Programm so, dass die gewürfelten Zahlen zwischen 100 und 700 liegen.
Weblinks
- Wikipedia: Selectionsort
zurück
© ERG Saalfeld - HD. Kirmse + Dustin Wiese letztes Update 16.08.2022
|