Помогите описать код. Не совсем понимаю что тут написано
Если что здесь происходит метод каскадного слияния
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
bool fillFile(string FileName, int Number, int min = -100, int max = 100);
bool tmpFiles(string FileName,const vector<int>& Files,const vector<string>& FN);
int fileSeries( vector<int>& Files, int level);
bool cascadeSort(string FileOut, const vector<string>&FN,int NumberFile,int level);
int main()
{
setlocale(0,"");
int NumberFiles = 6;
vector <int> Files(NumberFiles);
vector<string>FilesName(NumberFiles);
for (int i = 0;i < NumberFiles;i++)
FilesName[i] = "tmp" + to_string(i) + ".txt";
int min=0, max=0,level=0;
cout << "Введите границы диапазона для случайных значений\n";
cout << "min="; cin >> min;
cout << "max="; cin >> max;
if (min > max) swap(min, max);
cout << "Введите уровень для определения кол-ва данных в файле:\n";
cin >> level;
if (level < 0) level = abs(level);
int count = fileSeries(Files, level);
if (!fillFile("input.txt", count, min, max))
{
cout << "Файл \"input.txt\" успешно сформирован.\nОбъем - "<<count<<" значений\n";
if (!tmpFiles("input.txt", Files, FilesName))
cout << "Данные разбиты на части\n";
else
{
cout << "Не удалось сформировать файлы для каскадной сортировки\n";
return -1;
}
if (!cascadeSort("output.txt", FilesName,NumberFiles, level))
cout <<"Данные отсортированы. Результат в файле \"output.txt\"\n";
else
{
cout << "Не удалось выполнить сортировку\n";
return -1;
}
}
else
{
cout << "Не удалось создать файл исходных данных\n";
return -1;
}
return 0;
}
int fileSeries(vector<int>& Files, int level)
{
Files[0] = 1;
for (int j=1;j<=level;j++)
{
reverse(Files.begin(), Files.end() - 1);
for (int i = Files.size() - 3; i >= 0;i--)
{
Files[i] += Files[i + 1];
}
}
int result = 0;
for (vector<int>::iterator iter = Files.begin();iter < Files.end() - 1;iter++)
result += *iter;
return result;
}
bool fillFile(std::string FileName, int Number, int min, int max)
{
std::ofstream FileIn(FileName);
if (!FileIn.is_open())
{
return -1;
}
srand(time(0));
for (int i = 0; i < Number;i++)
{
FileIn << (min + rand() % (max - min + 1)) << " ";
}
FileIn.close();
return 0;
}
bool tmpFiles(string FileName, const vector <int>& Files, const vector<string>& FN)
{
fstream FileIn,FileTmp;
FileIn.open(FileName, ios_base::in);
if (FileIn.is_open())
{
for (int i = 0;i < Files.size();i++)
{
FileTmp.open(FN[i], std::ios_base::out);
for (int j = 0;j < Files[i];j++)
{
int tmp;
FileTmp << " ";FileIn >> tmp;
FileTmp << tmp;
}
FileTmp.close();
}
FileIn.close();
return 0;
}
else { return -1; }
}
bool cascadeSort(string FileOut, const vector<string>& FN,int NumberFiles, int level)
{
std::vector<int> Series(NumberFiles);
std::vector<int> TAPE(NumberFiles);
std::vector<std::fstream> FileTmp(NumberFiles);
vector<int> TmpMerge;
for (int i = 0;i < NumberFiles - 1;i++)
{
Series[i]= 1;
TAPE[i] = i;
}
TAPE[NumberFiles-1] = NumberFiles-1;
while (level != 0)
{
for (int i = 0;i < NumberFiles - 1;i++)
{
FileTmp[TAPE[i]].open(FN[TAPE[i]], std::ios_base::in);
}
int p = NumberFiles - 1;
FileTmp[TAPE[p]].open(FN[TAPE[p]], std::ios_base::out);
FileTmp[TAPE[p]].clear();
for (;p >= 1;p--)
{
while (!FileTmp[TAPE[p-1]].eof())
{
for (int i = 0;i < p;i++)
{
for (int j = 0;j < Series[TAPE[i]];j++)
{
int tmp;
FileTmp[TAPE[i]] >> tmp;
TmpMerge.push_back(tmp);
}
}
sort(TmpMerge.begin(), TmpMerge.end());
for (vector<int>::iterator iter = TmpMerge.begin();iter < TmpMerge.end();iter++)
{
FileTmp[TAPE[p]] <<" "<< *iter;
// cout <<" "<< *iter;
}
// cout << endl;
TmpMerge.clear();
}
FileTmp[TAPE[p - 1]].close();
int sum = 0;
for (int i=0;i<p;i++)
sum += Series[TAPE[i]];
Series[TAPE[p]] = sum;
FileTmp[TAPE[p]].close();
FileTmp[TAPE[p - 1]].open(FN[TAPE[p-1]], std::ios_base::out);
}
reverse(TAPE.begin(), TAPE.end());
level--;
}
remove(FileOut.c_str());
rename(FN[TAPE[0]].c_str(), FileOut.c_str());
for (int i = 0;i < NumberFiles;i++)
{
remove(FN[TAPE[i]].c_str());
}
return 0;
}