Алгоритм сортування виглядає так:
Поки список не відсортований, оснастіть половину всіх елементів (видаліть їх зі списку). Продовжуйте, поки список не буде відсортований або залишиться лише один елемент (який сортується за замовчуванням). Цей алгоритм сортування може давати різні результати на основі реалізації.
Процедура вилучення предмета вирішуватиме впровадження, але список повинен бути наполовину довшим, ніж раніше після одного проходження процедури вилучення елемента. Ваш алгоритм може вирішити видалити або першу половину, або список, останню половину списку, усі непарні елементи, усі парні елементи, по одному, поки список не буде наполовину довшим або будь-який не згаданий.
Список вхідних даних може містити довільну кількість елементів (в межах причини, скажімо, до 1000 предметів), а не лише ідеально розділені списки 2 ^ n елементів. Вам доведеться або видалити (n + 1) / 2, або (n-1) / 2 пункти, якщо список непарний, або твердо кодований, або вирішено випадковим чином під час виконання. Вирішіть самі: що робитиме Танос, якби у Всесвіті містилася непарна кількість живого?
Список сортується, якщо жоден елемент не менший за будь-який попередній елемент. Дублікати можуть виникати на вході, а також у виході.
Ваша програма повинна взяти масив цілих чисел (через stdin або як параметри, або окремі елементи, або параметр масиву), і повернути відсортований масив (або роздрукувати його в stdout).
Приклади:
// A sorted list remains sorted
[1, 2, 3, 4, 5] -> [1, 2, 3, 4, 5]
// A list with duplicates may keep duplicates in the result
[1, 2, 3, 4, 3] -> [1, 3, 3] // Removing every second item
[1, 2, 3, 4, 3] -> [3, 4, 3] -> [4, 3] -> [3] // Removing the first half
[1, 2, 3, 4, 3] -> [1, 2] // Removing the last half
[1, 2, 4, 3, 5]
може дати різні результати:
// Removing every second item:
[1, 2, 4, 3, 5] -> [1, 4, 5]
або:
// Removing the first half of the list
[1, 2, 4, 3, 5] -> [3, 5] // With (n+1)/2 items removed
[1, 2, 4, 3, 5] -> [4, 3, 5] -> [3, 5] // With (n-1)/2 items removed
або:
// Removing the last half of the list
[1, 2, 4, 3, 5] -> [1, 2] // With (n+1)/2 items removed
[1, 2, 4, 3, 5] -> [1, 2, 4] // With (n-1)/2 items removed
або:
// Taking random items away until half (in this case (n-1)/2) of the items remain
[1, 2, 4, 3, 5] -> [1, 4, 3] -> [4, 3] -> [4]
[9, 1, 1, 1, 1]
. Мій власний алгоритм не вдався до цього вводу