- •Інформатика
- •Необчислювальні алгоритмы
- •Від автора
- •Створення алгоритму
- •Налагодження алгоритму
- •Допоміжні задачі
- •Поняття систем числення
- •Числова інформація Цілі числа
- •Дійсні числа
- •Текстова інформація Символи
- •Дерево. Бінарне дерево
- •If to nil then with t* do begin
- •Бінарний пошук Пошук діленням навпіл
- •Рекурсивний бінарний пошук
- •Пошук у рядку
- •Скінченні автомати Основні поняття
- •Пошук у мережі
- •Прямі методи сортування Сортування вибором
- •Сортування обміном
- •Шейкерне сортування
- •Сортування методом Шелла
- •Швидке сортування
- •Метод прямого злиття
- •Метод природного злиття
- •Сортування підрахунком
- •Цифрове сортування
- •Література
- •61012, М. Харків, вул. Енгельса, 11.
Сортування підрахунком
Якщо наперед відомий проміжок зміни значень елементів масиву, що впорядковується, то виявляється, що зовсім немає потреби в цьому впорядкуванні. Потрібно лише під час читан-ня елементів вхідного масиву підраховувати кількість можли-вих значень елементів, що ввійшли в конкретний масив.
Саме умова належності значень елементів масиву, що впо-рядковується, наперед відомому проміжку і є обмеженням на використання даного алгоритму.
Для такого підрахунку слід передбачити існування масиву, кількість елементів у якому дорівнюватиме кількості можли-вих значень елементів заданого масиву, а індекси збігатимуть-ся з цими значениями.
197
Розглянемо приклад масиву шкільних балів, які можуть змінюватися в межах від 1 до 12. Зрозуміло, що в описаному підході до впорядкування такого масиву заносити його в па-м'ять комп'ютера немае потреби. Достатньо покроково зчиту-вати елементи вхідної послідовності в деяку змінну х і зразу ж аналізувати це значения. Для фіксації кількості тих чи інших балів у вхідній послідовності зарезервуємо масив а., де і = 1, 2, ..., 12. Якщо х - 9, то значения ад збільшимо на 1. Зрозу-міло, що на початку роботи з масивом а необхідно всі його значения обнулити. Після завершения читання вхідної інфор-мації в масиві а буде вся необхідна нам інформація. Значениям елемента at буде кількість балів зі значениям і. Зрештою залишиться тільки роздрукувати числа і стільки разів, яким є значения самого елемента а(.
Загальний вигляд алгоритму у вигляді тексту Pascal-програ-ми значень вхідного масиву в проміжку [k; 1] виглядатиме так:
a: array[k.. I] of <зчислений тип>;
for i := k to I do
a[i]:=0; for i := 1 to n do begin
read (x); inc(a[x]) end; for i := k to I do if a[i]<>0then
forj := 1 toa[i] do write(i, ''); writeln;
Зрозуміло, що пей метод можна застосувати для будь-якої за довжиною послідовності вхідних значень. Вони можуть бути розміщені на диску у вхідному файлі, і прямо із файла будемо вести читання елементів.
Зробимо одне зауваження. Ми недарма в якості типу елемен-тів масиву а записали «зчислений тип». Справа в тому, що для елементів вхідного масиву типу real масив для підрахунку його елементів зарезервувати неможливо. Обґрунтуйте це твер-дження самостійно.
За традицією введемо оцінку ефективності роботи алгоритму сортування масиву методом підрахунку. Для даного методу вона становить О(п).
Оскільки сортування підрахунком абсолютно не залежить від упорядкованості чи неупорядкованості вхідних даних, то в цьому можна пересвідчитися при тестуванні саме на таких вхідних даних:
198
-
вхідний масив уже впорядкований необхідним чином;
-
вхідний масив є частково впорядкованим;
-
вхідний масив упорядкований у зворотному порядку;
-
елементи вхідного масиву розміщені випадковим чином. При тестуванні різних вхідних даних, що впорядковуються
алгоритмом підрахунку, обов'язково треба врахувати те, що робота даного алгоритму не стільки чутлива до довжини цих вхідних даних, скільки до діапазону зміни їх значень. Тому не-обхідно згенерувати такі послідовності вхідних даних для л > 100, щоб діапазон зміни їх значень давав змогу використа-ти метод сортування підрахунком.
/ Запитання для самоконтролю
-
Які фаю ори впливають на вибір тих чи інших методів сортування елементів масивів та на ефективність роботи цих алгоритмів?
-
У чому полягає ідея сортування елементів масиву методом пщрахунку?
-
Які обмеження накладаються на значения елементів масиву, що сортується методом пщрахунку?
-
Чи є обмеження на кількість елементів масиву, який сортується методом пщрахунку?
-
Чи є обмеження на тип елементів масиву, який може бути від-сортований методом пщрахунку?
-
Запишіть алгоритм і текст Pascal-програми, що реалізує сортування масиву методом пщрахунку.
-
Якою є оцінка ефективності роботи алгоритму сортування масиву методом пщрахунку?
Завдання
-
Реалізувати у вигляді програми алгоритм сортування задано'! послідовності за зростанням методом підрахунку.
-
Модифікувати алгоритм, реалізований у завданні 1, так, щоб сортування відбувалося за спаданиям.
-
Протестувати реалізовані в завданнях 1-2 алгоритми для масиву 15, 4, 10, 8, 6, 9, 16, 1, 7, 3, 11, 14, 2, 5, 12, 13.
-
Проаналізувати покрокове виконання завдання 3 щодо кількості виконуваних дій.
-
Підібрати власні тести, які доводять переваги й показу-ють недоліки методу сортування підрахунком при п > 100.
-
Зробити письмовий аналіз завдань 3-5.