2016-12-20 2 views
-2

Ich habe eine zweidimensionale Liste, die ich sortieren muss und ich muss nur While-Schleifen verwenden. Bis jetzt funktioniert mein Code nicht für alle Listen.Sortiere eine Liste ohne eingebaute Funktionen wie sort, set, min, max, entferne in python

def sort(list): 
    i = 0 
    j = 0 
    while i < len(list): 
     while j < len(list[i]) - 1: 
      if list[i][j] > list[i][j + 1]: 
       temp = list[i][j] 
       list[i][j] = list[i][j + 1] 
       list[i][j + 1] = temp 
      j += 1 
     j = 0 
     i += 1 
    return list 
sort([[3,5,2,8,6,9],[9,1,2,5]]) 

Dieser Code hat noch Zahlen aus der Ordnung. Gibt es einen besseren Weg zu sortieren?

+0

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren Code veröffentlicht und das Problem genau beschrieben haben. Konkret, was hast du bekommen und was erwartest du? Dieser Code scheint die einzelnen Listen unabhängig voneinander zu sortieren. – Prune

+0

http://python3.codes/popular-sorting-algorithms/ – acushner

Antwort

2

Ihre innere Schleife benötigt nur einen Durchlauf durch die Liste. Dies garantiert, dass das größte Element am Ende ist, aber nicht notwendigerweise etwas anderes tut. Sie müssen eine Schleife hinzufügen, um fortzufahren, während Sie noch nicht abgeschlossene Geschäfte haben.

Ich links in den Trace-Anweisungen, die ich verwendet habe, um das Problem zu markieren, sowie die einfache umgekehrte Reihenfolge.

def sort(list): 
    i = 0 
    j = 0 
    while i < len(list): 
     done = False 
     while not done: 
      done = True 
      while j < len(list[i]) - 1: 
       print i, j, list[i][j], list[i][j + 1] 
       if list[i][j] > list[i][j + 1]: 
        temp = list[i][j] 
        list[i][j] = list[i][j + 1] 
        list[i][j + 1] = temp 
        done = False 
        print "SWAP", list[i] 
       j += 1 

      j = 0 

     i += 1 
    return list 

print sort([[6, 5, 4, 3, 2, 1, 0]]) 
print sort([[3,5,2,8,6,9],[9,1,2,5]]) 
Verwandte Themen