From 8390db169fec831373ba4902315c6315d5f2a3af Mon Sep 17 00:00:00 2001 From: bronku Date: Fri, 9 Jan 2026 01:54:56 +0100 Subject: [PATCH] updated readme, and fixed linux compilation --- .gitignore | 1 + README.md | 39 +++++++++++++++++++++++++++++++++++++++ include/file_reader.hpp | 1 + include/file_writer.hpp | 2 ++ makefile | 2 +- src/file_reader.cpp | 1 + src/file_writer.cpp | 1 + src/merge_sorter.cpp | 2 ++ 8 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 README.md diff --git a/.gitignore b/.gitignore index c3ed6c0..00d202c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ tests tmp .DS_Store .idea +*.dat diff --git a/README.md b/README.md new file mode 100644 index 0000000..8ab1997 --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# External Merge Sort (Big Buffer Strategy) +A C++20 implementation of an external sorting algorithm designed to sort files that are too large to fit into the system's RAM. This project uses a Big Buffer approach to minimize disk I/O by maximizing the use of available memory during both the initial run creation and the merging phases. + +# Requirements + Clang++ or G++ (Support for C++20 required) + Make + +# Compilation +```bash +make +```` + +# Usage + +The binary is located in the build/ directory after compilation. + +# Generate Data + +# To generate a test file with 100,000 random records: +```bash +./build/main -g 100000 -o input.dat +``` + +# Sort Data + +To sort the generated file using 11 buffers of 10 records each: +```bash +./build/main -i input.dat -o output.dat -n 11 -b 10 +``` + +# Options +Flag Description +-i Input file path +-o Output file path +-n Number of buffers (minimum 3) +-b Size of each buffer (number of records) +-g Generate count random records +-e Evaluate and print the contents of a file +-d Temporary directory for merge runs diff --git a/include/file_reader.hpp b/include/file_reader.hpp index 3fd8e25..6470499 100644 --- a/include/file_reader.hpp +++ b/include/file_reader.hpp @@ -1,4 +1,5 @@ #pragma once +#include #include "record.hpp" #include #include diff --git a/include/file_writer.hpp b/include/file_writer.hpp index 1e5b3a1..ab7e432 100644 --- a/include/file_writer.hpp +++ b/include/file_writer.hpp @@ -1,4 +1,6 @@ #pragma once +#include +#include #include "record.hpp" #include #include diff --git a/makefile b/makefile index 968fd90..ea1b597 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,4 @@ -CXX = clang++ +CXX = g++ CXXFLAGS = -g -std=c++20 -Iinclude -Wall -Wextra -Werror LDFLAGS = diff --git a/src/file_reader.cpp b/src/file_reader.cpp index e708a15..4a10702 100644 --- a/src/file_reader.cpp +++ b/src/file_reader.cpp @@ -1,3 +1,4 @@ +#include #include "../include/file_reader.hpp" void FileReader::refill_buffer() diff --git a/src/file_writer.cpp b/src/file_writer.cpp index dabe0b3..d61f651 100644 --- a/src/file_writer.cpp +++ b/src/file_writer.cpp @@ -1,3 +1,4 @@ +#include #include "../include/file_writer.hpp" void FileWriter::write_buffer() diff --git a/src/merge_sorter.cpp b/src/merge_sorter.cpp index f9189f2..6157a9f 100644 --- a/src/merge_sorter.cpp +++ b/src/merge_sorter.cpp @@ -1,3 +1,5 @@ +#include +#include #include "../include/merge_sorter.hpp" std::span MergeSorter::get_chunk_span(size_t chunk_index)