Сортировка вставки не упорядочивает массив правильно

Вот мой вид вставки, именно такой, как в книге "Введение в алгоритмы":

def insertion_sort():
    A = [5,2,4,6,1,3]
    for j in range(1, len(A)):
        print 'j:'+str(j)
        key = A[j]
        print 'key:'+str(key)
        i=j-1
        print 'i:'+str(i)
        while i > 0 and A[i] > key:
            A[i+1] = A[i]
            i=i-1
            print 'new i: '+str(i)
        print 'swapping value: '+str(A[i]) + ' with value: '+str(A[i+1])
        print ' '
        A[i+1] = key
    print A

Это печатает:

[5, 1, 2, 3, 4, 6]

Что я делаю не так, чтобы они вышли из строя?

1 ответ

Решение

Во введении к алгоритмам они всегда предполагают, что массивы начинаются с индекса 1, поэтому вы начинаете range() в 1, но списки Python индексируются на основе 0. Это означает, что вы никогда не сравниваете 5, который находится в A[0], Обратите внимание на все после 5 отсортировано

изменив цикл for на -

for j in range(0, len(A)):

и ваше время, пока

while i >= 0 and A[i] > key:

Должен сделать свое дело.

Другие вопросы по тегам