Данный проект содержит реализацию различных сортировочных алгоритмов на C++. Все алгоритмы организованы в соответствующих заголовочных и исходных файлах.
Общее
C++ |
Системы сборки и управления зависимостями
Make |
Nix |
Контейнеризация
Docker |
Скрипты
Bash |
Perl |
Тестирование
Google Benchmark |
Catch2 |
- Bubble Sort - Простая сортировка с повторяющимся проходом по массиву.
- Optimized Bubble Sort - Улучшенная версия пузырьковой сортировки, которая останавливается, если массив уже отсортирован.
- Insertion Sort - Сортировка вставками, которая строит отсортированный массив, вставляя элементы по одному.
- Shell Sort - Сортировка Шелла, использующая изменяющийся шаг для сортировки элементов на большом расстоянии, что делает её быстрее стандартной сортировки вставками.
- Exchange Sort - Сортировка, основанная на обменах соседних элементов.
- Bogo Sort - Неэффективный алгоритм, который случайно переставляет элементы массива до его сортировки. Средняя сложность O((n+1)!).
- Quick Sort - Быстрая сортировка, использующая метод разбиения массива и рекурсивную сортировку подмассивов.
- Selection Sort - Сортировка выбором, которая последовательно находит минимальный элемент и помещает его на место.
- Shaker Sort - Двунаправленная сортировка, которая проходит по массиву в обе стороны.
- Binary Insertion Sort - Сортировка вставками с использованием бинарного поиска для нахождения позиции вставки.
Для работы с проектом вам потребуется компилятор C++. Вы можете использовать такие инструменты, как g++
, clang++
или любой другой, поддерживающий стандарт C++11 и выше.
-
Клонируйте репозиторий:
git clone git@github.com:Ogorod-corp/sorting.git cd sorting
-
Скомпилируйте исходные файлы:
g++ -o sort main.cpp src/*.cpp
-
Запустите программу:
./sort
Вот структура проекта с описанием основных компонентов:
├── .github # CI/CD конфигурации
├── .vscode # Настройки Visual Studio Code
├── benchmarks # Папка с файлами для бенчмаркинга алгоритмов
├── bin # Скомпилированные исполняемые файлы
│ ├── benchmark
│ └── test
├── docs # Документация по каждому алгоритму
├── include # Заголовочные файлы
├── libs # Библиотеки
│ ├── catch2
│ └── benchmark
├── src # Исходные файлы с реализацией алгоритмов сортировок
│ ├── bogo.sort.cpp
│ ├── quick.sort.cpp
│ └── ...
├── tests # Папка с тестами
│ ├── bogo.sort.test.cpp
│ ├── quick.sort.test.cpp
│ └── ...
├── config.env # Конфигурационный файл окружения
├── Dockerfile # Dockerfile для контейнеризации
├── Makefile # Makefile для сборки проекта
└── shell.nix # Конфигурации для Nix
Вы можете использовать любую из реализованных функций сортировки, подключив соответствующий заголовочный файл и вызвав нужную функцию в вашем коде. Например:
#include "include/bubble.sort.h"
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n, true); // Сортировка по возрастанию
// Вывод отсортированного массива
for (int i = 0; i < n; i++)
std::cout << arr[i] << " ";
return 0;
}
Документация для каждого из алгоритмов представлена в формате Markdown в папке ./docs. В ней вы найдете описание функций, параметры и примеры использования.
Этот проект лицензирован под MIT License. Смотрите файл LICENSE для получения дополнительной информации.
Если вы хотите внести свой вклад в проект, пожалуйста, создайте новый pull request или откройте issue для обсуждения изменений.