Первый полный проход через цикл (то есть первая итерация вашего внешнего do
цикла) гарантированно поместит самый большой элемент в позицию a[size - 1]
.(Вы понимаете, почему?) Следующий полный проход гарантированно не изменит этого, и , кроме того, чтобы поместить второй по величине элемент в положение a[size - 2]
.(Опять понимаете почему?) И так далее.Таким образом, для первого прохода необходимо i
, чтобы перейти от 1
до size - 1
, а второму - i
, чтобы перейти от 1
до size - 2
, для третьего - i
, чтобы перейти от 1
до size - 3
и т. д.В целом, вам нужно максимум size - 1
проходов (последний проход просто покрывает позицию 1
и сравнивает a[1]
с a[0]
, чтобы убедиться, что самый маленький элемент на месте).
Итак, вашexternal for
-loop должен изменяться max_i
, изначально установлен на size - 1
и заканчиваться на 1
, а ваш внутренний for
-loop должен варьироваться i
от 1
до max_i
.