Проанализируйте фрагмент кода. Дан массив A = [3, 7, 1, 9, 4]. Сколько раз выполнится блок
#обмен (т.е. сколько раз поменяются местами элементы массива) при выполнении этого кода?
A = [3, 7, 1, 9, 4]
N = len(A)
for i in range(N - 1):
for j in range(N - 2, i - 1, -1):
if A[j + 1] < A[j]:
#обмен
A[j], A[j + 1] = A[j + 1], A[j]
Ответ: 4 обмена.
Пошагово (набор перестановок за каждый обмен):
Начальное A = [3, 7, 1, 9, 4]
i = 0, j = 3,2,1,0
- j = 3: A[4]=4 < A[3]=9 → обмен → [3, 7, 1, 4, 9] (1-й обмен)
- j = 2: A[3]=4 < A[2]=1 → нет
- j = 1: A[2]=1 < A[1]=7 → обмен → [3, 1, 7, 4, 9] (2-й обмен)
- j = 0: A[1]=1 < A[0]=3 → обмен → [1, 3, 7, 4, 9] (3-й обмен)
i = 1, j = 3,2,1
- j = 3: A[4]=9 < A[3]=4 → нет
- j = 2: A[3]=4 < A[2]=7 → обмен → [1, 3, 4, 7, 9] (4-й обмен)
- j = 1: A[2]=4 < A[1]=3 → нет
i = 2, j = 3,2
- обе проверки без обмена
i = 3, j = 3
- без обмена
Итого было совершено 4 обмена, итоговый массив: [1, 3, 4, 7, 9].