Опис предметної області - ESEI-ZNU/SortingAlgorithms GitHub Wiki
Предметна область: Сортування масивів є поширеною задачею в програмуванні та обробці даних. Існує багато алгоритмів сортування, кожен із яких має свої переваги та недоліки залежно від розміру даних, їхньої впорядкованості та вимог до обчислювальних ресурсів. Основні поняття: Порівняння – операція визначення відносного порядку двох елементів. Перестановка – зміна місця двох елементів у масиві. Час виконання – загальний час роботи алгоритму сортування. Стабільність сортування – властивість алгоритму зберігати відносний порядок однакових елементів. Асимптотична складність – оцінка часу роботи алгоритму в залежності від кількості вхідних даних. Класифікація алгоритмів сортування: Прості алгоритми:
- «Бульбашкове" сортування
- Шейкерне сортування
- Сортування вставками
- Сортування вибором Ефективні алгоритми:
- Швидке сортування
- Сортування злиттям Опис алгоритмів: Метод "бульбашки": порівнює сусідні елементи та міняє їх місцями, якщо вони знаходяться у невірному порядку. Повторюється до повного впорядкування. Шейкерне сортування: модифікований "бульбашковий" метод, що працює у двох напрямках, покращуючи ефективність. Сортування вставками: вставляє кожен елемент на відповідне місце у відсортованій частині масиву. Сортування вибором: на кожній ітерації знаходить найменший елемент та поміщає його на відповідне місце. Сортування злиттям: ділить масив на дві частини, сортує їх та об’єднує. Швидке сортування: вибирає опорний елемент, розбиває масив на дві частини (менші та більші за опорний) і рекурсивно сортує їх. Розроблені компоненти:
Клас масиву та ітератор (розробник 1):
У цьому проекті ми працюємо з різними алгоритмами сортування масивів цілих чисел, таких як метод бульбашки, шейкерне сортування, сортування вставками та інші. Метою проекту є порівняння їхньої ефективності на основі часу виконання, кількості порівнянь та кількості перестановок.
Як розробник 1, я відповідаю за створення базової структури даних у вигляді масиву, який використовується алгоритмами сортування. Мій внесок у проект включає: • Розробка класу для масиву цілих чисел. • Створення засобів доступу до цього масиву. • Реалізація ітератора для зручного перебору елементів масиву.
-
Основні поняття • Масив — структура даних, яка дозволяє зберігати колекцію елементів одного типу (в даному випадку, цілих чисел). • Ітератор — об’єкт, який дозволяє послідовно обходити елементи колекції (масиву) без безпосереднього доступу до індексів. • Засоби доступу — методи для отримання та зміни елементів масиву, що забезпечують абстракцію для операцій над масивом.
-
Клас масиву
У моїй частині проекту я створив клас MyArray, який представляє масив цілих чисел. Ось основні моменти:
• Масив ініціалізується через конструктор, де вказується його розмір.
• Створений метод getArr() для доступу до внутрішнього масиву.
• Всі елементи масиву інкапсульовані, щоб забезпечити правильне використання цього масиву через інтерфейси.
4. Засоби доступу
Засоби доступу до масиву включають методи для отримання елементів за індексом, а також можливість заповнювати масив вручну або за допомогою генерації випадкових чисел. • Метод доступу: для отримання значення елементів масиву. • Метод для заповнення вручну: щоб користувач міг самостійно ввести значення в масив. • Метод для випадкової генерації значень: для тестування алгоритмів з випадковими даними.
- Клас ітератора
Ітератор потрібен для зручного перебору елементів масиву. У моєму випадку, я реалізував простий ітератор для масиву, який дає можливість виконати операції, такі як підрахунок елементів або обробку елементів масиву в циклі.
Клас програми та засоби визначення ефективності - розробник 2
Як розробник 2, я відповідаю за створення класу програми та засобів визначення ефективності алгоритмів сортування. Мій внесок у проект включає:
• Розробка класу для запуску та тестування алгоритмів сортування. • Реалізація методів для вимірювання часу виконання, кількості порівнянь та кількості перестановок. • Спілкування з користувачем для отримання необхідних даних.
Основні поняття
• Клас програми — клас, який відповідає за запуск алгоритмів сортування та збір даних про їх ефективність. • Засоби визначення ефективності — методи для вимірювання часу виконання, кількості порівнянь та кількості перестановок під час сортування. • Спілкування з користувачем — процес отримання даних від користувача для налаштування параметрів сортування.
Клас програми
У моїй частині проекту я створила клас SortTester, який відповідає за запуск алгоритмів сортування та збір даних про їх ефективність.
Ось основні моменти:
• Клас містить методи для запуску кожного алгоритму сортування. • Реалізовані методи для вимірювання часу виконання, кількості порівнянь та кількості перестановок. • Дані про ефективність алгоритмів зберігаються та виводяться для порівняння. • Додані методи для спілкування з користувачем, щоб отримати необхідні дані.
Засоби визначення ефективності
Засоби визначення ефективності включають методи для вимірювання часу виконання, кількості порівнянь та кількості перестановок під час сортування:
• Метод вимірювання часу виконання: використовується для визначення часу, необхідного для сортування масиву. • Метод підрахунку порівнянь: використовується для підрахунку кількості порівнянь елементів масиву під час сортування. • Метод підрахунку перестановок: використовується для підрахунку кількості перестановок елементів масиву під час сортування.
Спілкування з користувачем
Для налаштування параметрів сортування необхідно отримати дані від користувача. У програмі реалізовані наступні питання:
• А як ви хочете задати значення елементів?- користувач може вибрати між ручним введенням значень або генерацією випадкових чисел. • А який алгоритм ви хочете обрати?- користувач може вибрати один з доступних алгоритмів сортування для тестування.
Реалізація
- Клас SortTester містить методи для запуску алгоритмів сортування та збору даних про їх ефективність.
- Метод runBubbleSort() запускає метод бульбашкового сортування та вимірює його ефективність.
- Метод runInsertionSort() запускає метод сортування вставками та вимірює його ефективність.
- Дані про ефективність алгоритмів зберігаються у відповідних змінних та виводяться для порівняння.
- Реалізовані методи для спілкування з користувачем, щоб отримати необхідні дані для налаштування параметрів сортування.
Алгоритми сортування (розробники 3-5):
- Реалізація вказаних методів сортування.
- Оптимізація алгоритмів для покращення продуктивності.