diff --git a/Bogosort.cpp b/Bogosort.cpp new file mode 100644 index 00000000..b4994c55 --- /dev/null +++ b/Bogosort.cpp @@ -0,0 +1,55 @@ +#include +#include +#include +#include +#include + +/* +Алгоритм сортировки Bogosort/Monkeysort (Болотная/Обезьянья сортировка) +Сортирует путём повторяющихся перемешиек, пока перемешка не даст отсортированный массив. +Сложность: +в лучшем случае -- O(n); +в среднем случае -- O(n * n!); +в худшем случае сортировка может вообще не закончиться. +Память: O(1). +*/ + +// Функция для выполнения Bogosort +void bogosort(std::vector& arr) { + std::random_device rd; + std::mt19937 g(rd()); + + // Проверка на отсортированность + while (!std::is_sorted(arr.begin(), arr.end())) { + std::shuffle(arr.begin(), arr.end(), g); // Случайная перемешка массива + } +} + +int main() { + std::vector arr = {5, 2, 9, 10, 11, 12, 1, 5, 111, 100}; + + std::cout << "Original array: "; + for (int num : arr) { + std::cout << num << " "; + } + std::cout << std::endl; + + // Замеряем время + std::clock_t start = std::clock(); // Начало замера + + // Выполняем Bogosort + bogosort(arr); + + std::clock_t end = std::clock(); // Конец замера + double time = double(end - start) / CLOCKS_PER_SEC; // Вычисляем время в секундах + + std::cout << "Sorted array: "; + for (int num : arr) { + std::cout << num << " "; + } + std::cout << std::endl; + + std::cout << "Time taken: " << time << " seconds" << std::endl; + + return 0; +} diff --git a/Bozosort.cpp b/Bozosort.cpp new file mode 100644 index 00000000..65e5c516 --- /dev/null +++ b/Bozosort.cpp @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include + +/* +Алгоритм сортировки Bozosort (Сортировка клоуна Бозо) +Сложность: +в лучшем случае -- O(n); +в среднем случае -- O(n * n!). +в худшем случае сортировка может вообще не закончиться. +Память -- O(n * n!). +*/ + +// Функция для выполнения Bozosort +void bozosort(std::vector& arr) { + std::random_device rd; + std::mt19937 g(rd()); + std::uniform_int_distribution dist(0, arr.size() - 1); + + while (!std::is_sorted(arr.begin(), arr.end())) { + // Меняем местами два случайных элемента + size_t i = dist(g), j = dist(g); + std::swap(arr[i], arr[j]); + } +} + +int main() { + std::vector arr = {5, 2, 9, 10, 11, 12, 1, 5, 111, 100}; + + std::cout << "Original array: "; + for (int num : arr) { + std::cout << num << " "; + } + std::cout << std::endl; + + // Замеряем время + std::clock_t start = std::clock(); // Начало замера + + // Выполняем Bogosort + bozosort(arr); + + std::clock_t end = std::clock(); // Конец замера + double time = double(end - start) / CLOCKS_PER_SEC; // Вычисляем время в секундах + + std::cout << "Sorted array: "; + for (int num : arr) { + std::cout << num << " "; + } + std::cout << std::endl; + + std::cout << "Time taken: " << time << " seconds" << std::endl; + + return 0; +} diff --git a/Laba 1 Spiridonov Gosha b/Laba 1 Spiridonov Gosha new file mode 100644 index 00000000..dfeed55a --- /dev/null +++ b/Laba 1 Spiridonov Gosha @@ -0,0 +1,37 @@ +#include +#include + +bool pch(int n) { + if (n <= 1) { + return false; + } + for (int i = 2; i <= sqrt(n); i++) { + if (n % i == 0) { + return false; + } + } + return true; +} //функция проверки на простое число + +int main() { + int num=0, sum=0, nel; //num количество подмассивов, sum сумма элементов подмассива, nel количество элементов массива + int** arr = new int*[num]; //создание двумерного массива + std::cout << "Введите количество подмассивов: "; + std::cin >> num; + int cpp = 0; // сколько подмассивов с суммой элементов - проствм числои + for (int i = 0; i < num; ++i) { + std::cout << "Введите количество элементов в подмассиве " << i + 1 << ": "; + std::cin >> nel; + arr[i] = new int[nel]; + std::cout << "Введите элементы подмассива " << i + 1 << ": "; + for (int j = 0; j < nel; ++j) { + std::cin >> arr[i][j]; + sum += arr[i][j]; + } + + if (pch(sum)) { + cpp+=1; //прибавляет один, если сумма простите число + } + } + std::cout << "Количество подмассивов с суммой элементов, являющейся простым числом: " << cpp << std::endl; +} diff --git a/Laba 2 Spiridonov Gosha b/Laba 2 Spiridonov Gosha new file mode 100644 index 00000000..35451381 --- /dev/null +++ b/Laba 2 Spiridonov Gosha @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#include +#include // для подсчёта памчти + +// считает повторения значений в массиве +std::vector numcases(const std::vector& arr) { + std::unordered_map nummap; + + // считает сколько раз каждый элемент + for (const auto& item : arr) { + nummap[item]++; + } + + // выводит в массив-результат количество повторений ^_^ <3 + std::vector result; + for (const auto& item : arr) { + result.push_back(nummap[item]); + } + + return result; +} + +// сколько ушло памяти (в б) +void memory () { + struct rusage usage; + getrusage(RUSAGE_SELF, &usage); + std::cout << "Памяти ушло: " << usage.ru_maxrss << " байт" << std::endl; +} + +void runtests() { + { + std::vector arr = {"Orange", "Red", "Green", "Orange"}; + std::vector expected = {2, 1, 1, 2}; + std::vector result = numcases(arr); + assert(result == expected); + std::cout << "Тест пройден" << std::endl; + memory(); + } + + { + std::vector arr = {"Lomo", "Pesochka", "Kronva", "Birzha"}; + std::vector expected = {1, 1, 1, 1}; + std::vector result = numcases(arr); + assert(result == expected); + std::cout << "Тест пройден" << std::endl; + memory(); + } + + { + std::vector arr = {"Vladislav", "Vladislav", "Vladislav", "Vladislav"}; + std::vector expected = {4, 4, 4, 4}; + std::vector result = numcases(arr); + assert(result == expected); + std::cout << "Тест пройден" << std::endl; + memory(); + } +} + +int main() { + // запуск тестиков + runtests(); + return 0; +}