Запишите полный текст программы и выполните её на компьютере для рассмотренного в примере массива A. Разработайте подпрограмму max для поиска максимального из двух элементов массива. Модифицируйте программу сортировки выбором, использовав в ней эту подпрограмму.
В примере дан массив A = [. Для каждого индекса i найдём наибольшее значение среди элементов от i до конца массива. Переменная imax хранит индекс наибольшего из просмотренных элементов. Сравниваем очередной элемент с найденным максимумом и, если нужно, обновляем индекс. Затем меняем элементы с индексами i и imax местами.
A = [ , , , , , , , ]
N = len(A)
for i in range(N - ):
imax = i
for j in range(i + , N):
if A[j] > A[imax]:
imax = j
A[i], A[imax] = A[imax], A[i]
print(A)
Ход обменов подтверждает результат: сначала , а оставшиеся уже стоят в нужном порядке. Программа выводит [.
Подпрограмма max получает два индекса и возвращает индекс элемента с большим значением. Это важно: для обмена нужны места элементов в массиве, а не только их значения. При равенстве оставляем первый индекс.
def max(A, left, right):
if A[right] > A[left]:
return right
return left
A = [ , , , , , , , ]
N = len(A)
for i in range(N - ):
imax = i
for j in range(i + , N):
imax = max(A, imax, j)
A[i], A[imax] = A[imax], A[i]
print(A)
При каждом вызове max сравниваются два элемента: текущий максимум неотсортированной части и следующий элемент. Поэтому после внутреннего цикла imax указывает на максимальный элемент этой части. Обе программы выводят один и тот же массив по невозрастанию.
В обоих вариантах результат: [.
