2017-10-13 5 views
-3

J'essayais de mettre en œuvre un tri par insertion en utilisant une fonction récursive.Tri par insertion utilisant une fonction récursive en python

def insertion_sort(arr): 
    found=False 
    #Base case when list has only one element 
    if len(arr)==1: 
     return arr 
    else: 
    ''' 
     insert nth element in appropriate postion in a sorted list of n-1 elements 
    '''  
     partial_list=insertion_sort(arr[:len(arr)-1] 
     element=arr[-1] 
     for i in range(len(partial_list)): 
      if partial_list[i]>element: 
       index=i 
       found=True 
       break 
     if found: 
      return partial_list.insert(index,element) 
     else: 
      return partial_list.append(element) 

Mais son montrant une erreur: pour i dans la plage (len (partial_list)): TypeError: objet de type 'NoneType' n'a pas len(). Quelqu'un peut-il expliquer pourquoi partial_list est un objet de type 'None'; même si la fonction insertion_sort retourne une liste?

+0

note: ceci est le cas d'utilisation parfait pour la boucle 'for' de' else'. Enregistre le drapeau 'found'. –

+0

vous renvoyez le résultat de 'insert' ou' append' qui est 'None'. d'abord ajouter ou insérer, puis 'return partial_list' –

Répondre

0

Il est évident qu'il ne retourne pas toujours une liste; au moins l'un des affirmer ou ajouter ne le fait pas.