2016-09-13 7 views
-2

Ich bin ein Anfänger Programmierer und ich habe versucht, meinen eigenen Sortieralgorithmus in Python zu erstellen, ich verstehe nicht, warum es nur einige der Zahlen ausgibt, die in der Eingabe vorhanden waren. Ich habe Debug-Prints überall hingelegt, um das Problem zu verstehen, aber ich habe immer noch nichts. Der Code sollte die größte Zahl des Eingabe-Arrays finden und zum letzten Array bewegen, und zwar so lange, bis das Eingabe-Array leer ist, aber es scheint an einem bestimmten Punkt zu stoppen. Es gab eine Person mit einer similar problem aber die Lösung galt auch nicht für mich. Dies ist der Code: (. Und es gibt zwei 5s im Eingang)Was ist falsch an meinem Sortieralgorithmus?

array = [3, 6, 25, 4, 5, 24, 7, 15, 5, 2, 0, 8, 1] #just random numbers 
output = [] 
while(len(array) > 0): 
    maximum = 0 
    for x in array: 
     maximum = max(maximum, x) 
    output.append(maximum) 
    tempArray = [] 
    for x in array: 
     temp = array.pop() 
     if(temp < maximum): 
      tempArray.append(temp) 
    array = tempArray 
print(output) 
+0

Könnten Sie bitte Ihre genaue Ausgabe posten? – LaneL

+1

Debugging-Tipp: Beginnen Sie mit kleineren Testfällen. Das macht es viel einfacher zu bestimmen, ob Ihre Annahmen über wie ein Programm funktioniert. Ihr Programm scheitert an '[1,2 ] ', zum Beispiel – molbdnilo

+0

@LaneL Die Ausgabe ist: [25, 15, 7, 5] – Hexwell

Antwort

4

Das Problem ist hier:

for x in array: 
    temp = array.pop() 

Sie die gleiche Liste ändern, die Sie iterieren. Das wird Ärger verursachen.

+0

Was zu der Frage führt .. warum überhaupt Temp verwenden? Sie sind nicht mod ifying x, warum nicht einfach direkt anhängen? –

0

überlegen Sie, was passiert, wenn 5 ist die maximale One 5 zur Ausgabe hinzugefügt wird, der Rest der 5s nie zu TempArray hinzugefügt.

+0

Ich werde das beheben, danke – Hexwell

0

Um zu diagnostizieren, legen Sie einige Debug-Ausdrucke in die Schleife, z. B. print(output, array) am Ende der äußeren Schleife. Und vielleicht mehr in der inneren Schleife. Nachdem ich das Problem (Entfernen von zwei Dinge von Array jede innere Iteration, das funktioniert.

array = [3, 6, 25, 4, 5, 24, 7, 15, 5, 2, 0, 8, 1] #just random numbers 
output = [] 
while(array): 
    maximum = 0 
    for x in array: 
     maximum = max(maximum, x) 
    output.append(maximum) 
    tempArray = [] 
    for x in array: 
     if(x < maximum): 
      tempArray.append(x) 
    array = tempArray 
print(output) 

Es gibt, natürlich, leichter und bessere Möglichkeiten, das max von Array zu löschen und nur eine Kopie von max löschen statt

Verwandte Themen