⚙️ Алгоритмы  ·  20 вопросов  ·  ~40 мин  ·  ⏱ Таймер 40:00  ·  Средний  ·  👥 1 прошёл

Алгоритмы сортировки

Сортировка — не соревнование названий. Один метод выигрывает на почти готовом массиве, другой нужен для данных на диске, третий сохраняет порядок равных записей, а четвёртый даёт строгую гарантию худшего случая. Вопросы требуют проследить проходы, найти нарушение устойчивости и выбрать решение под конкретные ограничения.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выбери один ответ из четырёх. В тесте 20 вопросов и 40 минут. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и пояснения.
Вопрос 1 из 20
Как будет выглядеть массив после одного полного прохода пузырьковой сортировки слева направо?
Python
a = [5, 1, 4, 2, 3]
for j in range(len(a) - 1):
    if a[j] > a[j + 1]:
        a[j], a[j + 1] = a[j + 1], a[j]
print(a)
Вопрос 2 из 20
Какой массив получится после вставки элемента с индексом i=4?
Python
a = [2, 4, 7, 9, 5, 8]
i = 4
key = a[i]
j = i - 1
while j >= 0 and a[j] > key:
    a[j + 1] = a[j]
    j -= 1
a[j + 1] = key
print(a)
Вопрос 3 из 20
Сколько обменов выполнит сортировка выбором на массиве [1,2,3,4], если обмен делается только когда найденный минимум не стоит на текущем месте?
Вопрос 4 из 20
Сколько инверсий в массиве?
(i,j):\ i\lt j,\ a_i\gt a_j
Python
a = [3, 1, 4, 2]
count = 0
for i in range(len(a)):
    for j in range(i + 1, len(a)):
        if a[i] > a[j]:
            count += 1
print(count)
Вопрос 5 из 20
Какая сортировка при проверке «были ли обмены» может завершиться за O(n) на уже отсортированном массиве?
Вопрос 6 из 20
Какой массив получится после этого разбиения относительно опорного элемента 4?
Python
a = [6, 2, 7, 3, 5, 4]
pivot = a[-1]
i = 0
for j in range(len(a) - 1):
    if a[j] < pivot:
        a[i], a[j] = a[j], a[i]
        i += 1
a[i], a[-1] = a[-1], a[i]
print(a, i)
Вопрос 7 из 20
Какой результат вернёт слияние?
Python
left = [1, 4, 8]
right = [2, 4, 7, 9]
i = j = 0
out = []
while i < len(left) and j < len(right):
    if left[i] <= right[j]:
        out.append(left[i]); i += 1
    else:
        out.append(right[j]); j += 1
out.extend(left[i:])
out.extend(right[j:])
print(out)
Вопрос 8 из 20
Почему сортировка слиянием имеет O(n log n)?
T(n)=2T(n/2)+O(n)
Вопрос 9 из 20
Какой вход наиболее опасен для этой реализации быстрой сортировки?
Python
def quicksort(a):
    if len(a) < 2:
        return a
    pivot = a[0]
    left = [x for x in a[1:] if x < pivot]
    right = [x for x in a[1:] if x >= pivot]
    return quicksort(left) + [pivot] + quicksort(right)
Вопрос 10 из 20
Что даёт случайный выбор опорного элемента в быстрой сортировке?
Вопрос 11 из 20
Какой порядок имён получится при устойчивой сортировке по score?
Python
rows = [('Анна', 8), ('Борис', 5), ('Вера', 8), ('Глеб', 5)]
rows.sort(key=lambda x: x[1])
print([name for name, _ in rows])
Вопрос 12 из 20
Данные сначала устойчиво отсортировали по фамилии, затем устойчиво по отделу. Какой итоговый порядок получится?
Вопрос 13 из 20
Что нарушает устойчивость в этом фрагменте сортировки вставками?
Python
for i in range(1, len(a)):
    key = a[i]
    j = i - 1
    while j >= 0 and a[j].score >= key.score:
        a[j + 1] = a[j]
        j -= 1
    a[j + 1] = key
Вопрос 14 из 20
Почему обратный проход делает эту сортировку подсчётом устойчивой?
Python
for x in a:
    count[key(x)] += 1
for i in range(1, len(count)):
    count[i] += count[i - 1]
for i in range(len(a) - 1, -1, -1):
    k = key(a[i])
    out[count[k] - 1] = a[i]
    count[k] -= 1
Вопрос 15 из 20
Как сделать неустойчивую сортировку пригодной для сохранения исходного порядка равных ключей?
Вопрос 16 из 20
Какой алгоритм особенно уместен для почти отсортированного массива с несколькими локальными нарушениями?
T=O(n+k)
Python
def insertion_sort(a):
    for i in range(1, len(a)):
        value = a[i]
        j = i - 1
        while j >= 0 and a[j] > value:
            a[j + 1] = a[j]
            j -= 1
        a[j + 1] = value

# В массиве велико n, но число инверсий k мало.
Вопрос 17 из 20
Файл значительно больше оперативной памяти. Какой подход обычно используют для сортировки?
Вопрос 18 из 20
Какая структура позволит получить пять наименьших элементов потока за O(n log 5) времени и O(5) дополнительной памяти?
Python
def five_smallest(stream):
    candidates = []
    for value in stream:
        if len(candidates) < 5:
            add_candidate(candidates, value)
        elif value < current_largest_candidate(candidates):
            replace_largest_candidate(candidates, value)
    return candidates

# Поток содержит миллионы значений; весь поток хранить нельзя.
Вопрос 19 из 20
Какая сортировка гарантирует O(n log n) в худшем случае, работает на месте с O(1) дополнительной памятью и не обязана быть устойчивой?
Вопрос 20 из 20
Даны миллионы целых ключей от 0 до 999, нужна линейная по n сортировка. Что разумнее всего?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу