Je m'apprends Python et j'ai des difficultés avec un concept relativement simple. Le but est de trier une liste dans l'ordre croissant en utilisant le tri par insertion. Voici le code:Impasse logique dans une insertion simple Trier
def InsertionSort(A):
for j in range(1, len(A)):
key = A[j]
i = j - 1
while (i >=0) and (A[i] > key):
A[i+1] = A[i] # this is the not understood point
i = i - 1
A[i+1] = key
print A
Je ne comprends pas comment fonctionne l'étape en gras. Par exemple, si j'avais une liste de [6,5,4,3,1] et que j'arrivais à la deuxième itération, ma liste ne serait-elle pas maintenant [6,6,4,3,1]? J'affecte A [i + 1] (dans le tout premier cas ce serait 5) la valeur de A [i] (6 dans le premier cas). Qu'est-il arrivé à mon 5? Ma première tentative le code était:
def InsertionSort(A):
for j in range(1, len(A)):
key = A[j]
i = j - 1
while (i >=0) and (A[i] > key):
temp = A[i+1]
A [i+1] = A[i]
A[i] = temp
i = i - 1
A[i+1] = key
print A
Cette méthode fonctionne aussi. Je ne comprends pas pourquoi le premier fait aussi bien. Quelqu'un veut-il prendre un coup de couteau?
L'étude des algorithmes! = l'étude d'un langage de programmation donné. Le fait que vous utilisiez Python n'est qu'accessoire à la question, qui consiste à comprendre la logique d'une implémentation de l'algorithme. –