Задать вопрос
9 февраля, 07:26

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

Он решил реализовать его для массива целых чисел [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.

+2
Ответы (1)
  1. 9 февраля, 07:53
    0
    Назовём инверсией пару элементов массива, в котором элемент с меньшим номером больше элемента с большим номером. Заметим, что после каждого обмена число инверсий в массиве уменьшается на 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] > arr[j]:

    counter + = 1

    return counter

    print (countInversions (before) - countInversions (after))

    Ответ: 60.
Знаете ответ на вопрос?
Не уверены в ответе?
Правильный ответ на вопрос 👍 «Вася изучил алгоритм сортировки пузырьком по неубыванию. Он решил реализовать его для массива целых чисел [13, 18, 7, 4, 10, 14, 15, 17, 2, ...» по предмету 📗 Информатика. Развернутая система поиска нашего сайта обязательно приведёт вас к нужной информации. Как вариант - оцените ответы на похожие вопросы. Но если вдруг и это не помогло - задавайте свой вопрос знающим оппонентам, которые быстро дадут на него ответ!
Искать готовые ответы