Что выполняет эта часть кода? Ни как не могу разобраться
Здесь происходит метод каскадного слияния, а вот что именно тут я не понимаю
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;
}