Giter VIP home page Giter VIP logo

lab6's Introduction

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

TO SEE ENGLISH VERSION OF THIS GUIDE, CLICK HERE

Чтобы увидеть код, нажмите здесь

Гайд по использованию проекта "Алгоритмы сортировки на C++"

Клонирование репозитория

Для начала вам нужно склонировать репозиторий на ваш локальный компьютер. Это можно сделать с помощью команды git clone, указав URL репозитория. Например:

git clone https://github.com/UrranQx/lab6.git

Установка необходимых инструментов

Проект написан на языке C++, поэтому вам понадобится компилятор C++. Также проект использует систему сборки CMake, поэтому вам потребуется установить CMake.

Сборка проекта

Убедитесь, что находитесь в корневой директории проекта.(pwd -> ...\lab6). Затем создайте директорию build и

Если нет желания устанавливать cmake, а есть нужна скомпилить самому, то можно воспользоваться командой g++:

g++ main.cpp -o ./lab6

Если вы установили cmake, то перейдите в директорию build и выполните команды cmake и make для сборки проекта. Например:

Введённые команды будут выглядеть так:

mkdir build
cd build
cmake ..
make

Запуск программы

После сборки проекта в директории build появится исполняемый файл lab6. Находясь в директории build запустите его, чтобы увидеть результаты сортировки. Например:

./lab6

А по Коду...

Этот проект представляет собой комплексную реализацию различных алгоритмов сортировки на C++. Код написан таким образом, что позволяет легко сравнивать производительность различных алгоритмов сортировки. Реализованные алгоритмы сортировки включают пузырьковую сортировку Bubble Sort, сортировку выбором Selection Sort, сортировку вставками Insertion Sort, сортировку Шелла Shell Sort и быструю сортировку Quick Sort.

Структура кода

Код организован вокруг функции main и функции sub_main. Функция main отвечает за получение от пользователя входных данных для размера матрицы и функции-компаратора, которая будет использоваться для сортировки. Функция sub_main - это место, где происходит непосредственная сортировка.

В коде также есть ряд вспомогательных функций для сортировки и работы с матрицей. Сюда входят функции для копирования и удаления матриц, поиска индекса максимального и минимального элементов в массиве, а также различные функции-компараторы для разных порядков сортировки.

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

Каждый алгоритм сортировки реализован как отдельная функция, которая принимает массив, его размер, функцию-компаратор и ссылки на переменные для отслеживания количества перестановок (далее свапов) и сравнений, сделанных во время сортировки.

Алгоритмы сортировки расположены в массиве для удобства. Это позволяет легко перебирать все алгоритмы сортировки, применяя их к одним и тем же данным и сравнивая их производительность.

Тип данных Comparator объявлен для удобства работы с функциями сравнения. Comparator - это указатель на функцию, которая принимает два аргумента и возвращает bool. Это позволяет использовать различные функции сравнения в алгоритмах сортировки, меняя порядок сортировки. Переменная debug используется для контроля вывода информации во время выполнения программы. В зависимости от значения debug, программа может выводить больше или меньше информации о своем выполнении. Это может быть полезно при отладке или при анализе производительности алгоритмов сортировки.

Сравнение производительности

В коде есть функциональность для сравнения производительности различных алгоритмов сортировки. Это делается путем отслеживания количества обменов и сравнений, сделанных во время сортировки. Результаты затем выводятся в таблицу для удобства сравнения.

Использование

Чтобы использовать код, просто запустите функцию main и следуйте подсказкам для ввода размера матрицы и функции-компаратора, которая будет использоваться для сортировки. Код затем отсортирует матрицу с использованием каждого из реализованных алгоритмов сортировки и выведет результаты.

Детали кода

Код использует ANSI цветовые коды для более удобного чтения вывода. Также используется функция std::setw для выравнивания вывода в аккуратную таблицу. Код динамически выделяет и освобождает память для матрицы и массивов, используемых для отслеживания количества обменов и сравнений.

В коде также есть функция amountOfDigits для вычисления количества цифр в числе, которая используется для определения ширины столбцов в таблице вывода.

Код использует функцию free для освобождения памяти, выделенной с помощью malloc, и оператор delete для освобождения памяти, выделенной с помощью new.

Дополнительная информация

В коде есть две разных реализации selectionSort. Одна из них selectionSort_orderFinder напрямую показывает принцип работы через введенную доп. функцию findIndexOfBestInOrder и иногда на малых значениях она делает меньше перестановок, но на больших данных все равно проигрывает в производительности. Вторая реализация selectionSort реализует незаурядный способ нахождения индекса нужного для свапа элемента. Их работа практически идентична, но как по мне, принцип действия первой реализации концептуально более понятный.

В коде есть комментарий в конце с инструкциями по созданию и удалению матрицы с использованием динамического выделения памяти в C++.

lab6's People

Contributors

urranqx avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.