Skip to content

Commit

Permalink
feat: add random array generation, shuffle and reverse
Browse files Browse the repository at this point in the history
  • Loading branch information
Me-Phew committed Nov 14, 2024
1 parent b6a38f9 commit 47c97cf
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 12 deletions.
8 changes: 6 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ cmake_minimum_required(VERSION 3.10)

project(MergeSort)

include_directories(src/app src/merge_sorter)
include_directories(src/app src/merge_sorter src/utils)

set(SOURCES src/main.cpp src/app/app.cpp src/merge_sorter/merge_sorter.cpp)
set(SOURCES src/main.cpp src/app/app.cpp
src/merge_sorter/merge_sorter.cpp
src/utils/array_utils/array_utils.cpp
src/utils/random_number_generator/random_number_generator.cpp
)

add_executable(MergeSort ${SOURCES})

Expand Down
48 changes: 38 additions & 10 deletions src/app/app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

#include "app.hpp"
#include "../merge_sorter/merge_sorter.hpp"
#include <array_utils/array_utils.hpp>
#include <random_number_generator/random_number_generator.hpp>

std::istream& operator>>(std::istream& iStream, MenuOption& menuOption) {
int num;
Expand All @@ -34,11 +36,14 @@ int App::mainMenu() {

std::cout << "---ZARZĄDZANIE LISTĄ---\n";
std::cout << "2. Wyświetl zawrtość\n";
std::cout << "3. Posortuj\n";
std::cout << "4. Wyczyść\n\n";
std::cout << "3. Wypełnij losowymi elementami\n";
std::cout << "4. Pomieszaj zawartość\n";
std::cout << "5. Odwróć kolejność elementów\n";
std::cout << "6. Posortuj\n";
std::cout << "7. Wyczyść\n\n";

std::cout << "---OPCJE---\n";
std::cout << "5. Wyjdź\n\n";
std::cout << "8. Wyjdź\n\n";

std::cout << "Wybierz działanie: ";

Expand All @@ -60,6 +65,15 @@ int App::mainMenu() {
case DISPLAY_ARRAY:
handleDisplayArray();
break;
case GENERATE_RANDOM_ARRAY:
handleGenerateRandomArray();
break;
case SHUFFLE_ARRAY:
handleShuffleArray();
break;
case REVERSE_ARRAY:
handleReverseArray();
break;
case SORT_ARRAY:
handleSortArray();
break;
Expand Down Expand Up @@ -97,17 +111,31 @@ void App::handleInsertItem() {
}

void App::handleDisplayArray() {
std::cout << "[";
displayArray(array);
}

for (auto it = array.begin(); it != array.end(); ++it) {
std::cout << *it;
void App::handleGenerateRandomArray() {
std::cout << "Podaj ilość elementów: ";
int count;
std::cin >> count;

if (it != array.end() - 1) {
std::cout << ", ";
}
array.clear();

for (int i = 0; i < count; ++i) {
array.push_back(RandomNumberGenerator::getRandomNumber(-99, 99));
}

std::cout << "]\n";
std::cout << "Wygenerowano listę\n";
}

void App::handleShuffleArray() {
randomlyShuffleArray(array);
std::cout << "Wymieszano listę\n";
}

void App::handleReverseArray() {
reverseArray(array);
std::cout << "Odwrócono listę\n";
}

void App::handleClearArray() {
Expand Down
9 changes: 9 additions & 0 deletions src/app/app.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ enum MenuOption {
INSERT_ITEM = 1,

DISPLAY_ARRAY,
GENERATE_RANDOM_ARRAY,
SHUFFLE_ARRAY,
REVERSE_ARRAY,
SORT_ARRAY,
CLEAR_ARRAY,

Expand Down Expand Up @@ -50,6 +53,12 @@ class App {

static void handleDisplayArray();

static void handleGenerateRandomArray();

static void handleShuffleArray();

static void handleReverseArray();

static void handleClearArray();

static void handleSortArray();
Expand Down
36 changes: 36 additions & 0 deletions src/utils/array_utils/array_utils.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include <vector>
#include <random>
#include <algorithm>
#include <iostream>

void displayArray(std::vector<int> arr) {
std::cout << "[";

for (auto it = arr.begin(); it != arr.end(); ++it) {
std::cout << *it;

if (it != arr.end() - 1) {
std::cout << ", ";
}
}

std::cout << "]\n";
}

void randomlyShuffleArray(std::vector<int>& arr) {
std::random_device randomDevice;
std::mt19937 generator(randomDevice());

std::shuffle(arr.begin(), arr.end(), generator);
}

void reverseArray(std::vector<int>& arr) {
for (int i = 0; i < arr.size() / 2; i++) {
//std::swap(arr[i], arr[arrSize - i - 1]);
int temp = arr[i];

int swappedElementIndex = arr.size() - i - 1;
arr[i] = arr[swappedElementIndex];
arr[swappedElementIndex] = temp;
}
}
12 changes: 12 additions & 0 deletions src/utils/array_utils/array_utils.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef ARRAY_UTILS_HPP
#define ARRAY_UTILS_HPP

#include <vector>

void displayArray(std::vector<int>);

void randomlyShuffleArray(std::vector<int>&);

void reverseArray(std::vector<int>&);

#endif /* ARRAY_UTILS_HPP */
20 changes: 20 additions & 0 deletions src/utils/random_number_generator/random_number_generator.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#include<cstdlib>
#include<ctime>

#include <random_number_generator/random_number_generator.hpp>

bool RandomNumberGenerator::isSeeded = false;

void RandomNumberGenerator::seed() {
if (!isSeeded) {
std::srand(std::time(NULL));
isSeeded = true;
}
}

int RandomNumberGenerator::getRandomNumber(int min, int max) {
RandomNumberGenerator::seed();

int range = max - min;
return std::rand() % range;
}
15 changes: 15 additions & 0 deletions src/utils/random_number_generator/random_number_generator.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#ifndef RANDOM_NUMBER_GENERATOR_HPP
#define RANDOM_NUMBER_GENERATOR_HPP

class RandomNumberGenerator {
private:
static bool isSeeded;

/// @brief Inicjalizuje generator liczb losowych.
static void seed();

public:
static int getRandomNumber(int min, int max);
};

#endif /* RANDOM_NUMBER_GENERATOR_HPP */

0 comments on commit 47c97cf

Please sign in to comment.