Я не выглядел слишком внимательно, но я думаю, что псевдокод книги использует индексирование на основе одного, и для кодирования на C (или в большинстве современных языков) вам нужно настроить его на индексирование с нуля.
Главный подозреваемый
for(int j=2; j<input; j++)
Где вы можете начать с 1 вместо 2.
Условие прекращения
while(i>0 && A[i]>key)
также необходимо изменить, чтобы убедиться, что вы выше -1, а не 0.
EDIT:
После чуть более пристального взгляда я почти уверен, что do также необходимо отрегулировать while
.
Вам также, конечно, следует пересмотреть все верхние пределы для аналогичных вопросов, возникающих один на один.