Ich versuche ein Array zu sortieren, wo es von der zweiten Nummer beginnt und schaut sich die eine an, um zu sehen, ob die vorherige Nummer größer ist. Wenn es so ist, möchte ich die Zahlen tauschen, ansonsten die Nummer dort behalten, wo sie ist. Momentan macht das mein Code nicht. Wenn ich das Array unten eingabe, ändert sich nur die 2 zu einer 11, was mir zwei 11 in der Mitte gibt. Was läuft falsch?Python Swap-Sortierung gibt keine korrekte Ausgabe
#given an array of digits a of length N
a = [7, 3, 11, 2, 6, 16]
N = len(a)
# moving forward along a starting from the second position to the end
# define _sillysort(a, start_pos):
# set position = start_pos
# moving backwards along a from start_pos:
# if the a[position-1] is greater than a[position]:
# swap a[position-1] and a[position]
def sillysort(a, start_pos):
a_sorted = []
start_pos = a[1]
for position in a:
if a[start_pos-1] >= a[start_pos]:
a[start_pos-1], a[start_pos] = a[start_pos], a[start_pos-1]
else:
a[start_pos-1] = a[start_pos]
a_sorted.append(position)
position += 1
return a_sorted
Wenn ich dies ausführen, sillysort (a, N), habe ich diesen Ausgang [7, 3, 11, 11, 6, 16].