2017-06-02 4 views
1

J'ai essayé de mettre en œuvre le tri par insertion en Python:Pourquoi ma fonction de tri d'insertion renvoie-t-elle None?

def insert_sort(list): 
    y= len(list) 
    for b in range(1,y): 
     value = list[b] 
     a = b-1 
     while a>= 0: 
      if list[a] > value: 
       list[a+1] = list[a] 
       list[a] = value 
       a = a -1 
      else: 
       break 

li = [34, 55, 4, 455, 556, 33, 2, 54, 6, 8, 1] 
l= insert_sort(li) 
print (l) 

Mais je ne peux pas dire si cela fonctionne même parce l sort toujours None. Qu'est-ce qui ne va pas?

+6

Conseil: compter le nombre de déclarations 'return'. – torek

+0

Ce n'est pas votre problème réel mais l'utilisation de 'list' comme nom d'une variable en Python est un mauvais style car ce nom est déjà pris par une fonction intégrée. – zwol

+1

Pourquoi avez-vous besoin de retourner quelque chose? Il modifie la liste qui lui a été donnée en argument, donc vous pouvez juste imprimer 'li'. – Barmar

Répondre

2

Vous manque une déclaration return:

def insert_sort(list): 
    y= len(list) 
    for b in range(1,y): 
     value = list[b] 
     a = b-1 
     while a>= 0: 
      if list[a] > value: 
       list[a+1] = list[a] 
       list[a] = value 
       a = a -1 
      else: 
       break 
    return list 

li = [34, 55, 4, 455, 556, 33, 2, 54, 6, 8, 1] 
l= insert_sort(li) 
print (l) 
+0

J'ai un retour hier, mais ce n'était toujours pas un résultat. Aujourd'hui c'est possible! Merci beaucoup! –