Я думаю, что это просто из-за строки A[i+1]=key
.
Первый алгоритм делает следующее: Рассмотрим список [1,2,4,5,3]
, предположим, что мы находимся в итерации, где j=4
, т.е. мы рассматриваем списокэлемент 3
.Алгоритм сохраняет элемент 3
в key
и проверяет следующее:
[1,2,4,5,3]
^ 5>3 (key) => move 5 forward by 1 => [1,2,4,5,5]
[1,2,4,5,5]
^ 4>3 (key) => move 4 forward by 1 => [1,2,4,4,5]
[1,2,4,4,5]
^ 2<3 => stop inner while loop
now, make A[i+1]=key (remember: key is 3):
[1,2,3,4,5]
В отличие от вышеизложенного, второй алгоритм фактически меняет элементы в каждой итерации:
[1,2,4,5,3]
^ 5>3 (key) => swap 5 and 3 => [1,2,4,3,5]
[1,2,4,3,5]
^ 4>3 (key) => swap 4 and 3 => [1,2,3,4,5]
[1,2,3,4,5]
^ 2<3 => stop while loop
now, make A[i+1]=key (remember: key is 3): (this is unnecessary!)
[1,2,3,4,5]