Вася выучил метод сортировки пузырьком по неубыванию. Он решил воплотить его

Вася изучил метод сортировки пузырьком по неубыванию.
Он решил воплотить его для массива целых чисел [13, 18, 7, 4, 10, 14, 15, 17, 2, 5, 9, 16, 11, 3, 20, 6, 19, 12, 8, 1] так: избираем два случайных соседних элемента в массиве, если левый больше правого, меняем их местами, иначе ничего не делаем. Из любопытства, после каждого обмена он выводил новый массив на экран.
Через какое-то время на экране оказался массив [4, 7, 2, 5, 10, 9, 13, 11, 3, 14, 6, 15, 12, 8, 1, 16, 17, 18, 19, 20], а компьютер завис. Сколько операций размена было сделано за время работы программки? В качестве ответа укажите одно естественное число, к примеру, 100.
Пример. Пусть был массив [5, 4, 3, 2, 1], а через некое время появился массив [4, 5, 3, 1, 2].
Тогда за время работы программки было изготовлено две операции размена поменялись местами числа 5 и 4 и числа 2 и 1.

Задать свой вопрос
1 ответ
Назовём инверсией пару частей массива, в котором элемент с наименьшим номером больше элемента с великим номером. Заметим, что после каждого обмена число инверсий в массиве уменьшается на 1. Тогда, посчитав число инверсий до работы программки и после, и вычтя из первого второе, мы получим число операций обмена.

Массив небольшой, и можно подсчитывать инверсии как угодно.

python 3.5:
before = [13, 18, 7, 4, 10, 14, 15, 17, 2, 5, 9, 16, 11, 3, 20, 6, 19, 12, 8, 1] 
after =  [4, 7, 2, 5, 10, 9, 13, 11, 3, 14, 6, 15, 12, 8, 1, 16, 17, 18, 19, 20]
 
def countInversions(arr):
  counter = 0
  for i in range(len(arr) - 1):
    for j in range(i + 1, len(arr)):
      if arr[i] gt; arr[j]:
        counter += 1
  return counter
  
print(countInversions(before) - countInversions(after))

Ответ: 60.
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт