ЗНАЙОМСТВО З СОРТУВАННЯМ ФАЙЛІВ
Для подальшого уточнення алгоритму скористаємося підпрограмами підрозділу 17.4.2, дещо змінивши їх із урахуванням подання даних.
Нехай процедура з заголовком indbld(m:Longint) задає початкову перестановку значень масиву P таким чином, що виконується умова (18.2). Нехай процедура indreorg(i,k:Longint) задає відновлення властивості (18.2) у частині масиву A[P[i]], … , A[P[k]].
З використанням усіх указаних підпрограм уточнимо алгоритм. Нехай змінна n зберігає кількість значень, скопійованих у масив A, ch – кількість значень, записаних у сховище, подане файлом h. Нехай last – останнє значення, виведене в результатний файл. Не записуючи всіх означень, наведемо основну частину програми:
copyfa(f, A, n); indbld(n); ch:=0;
while (n>0) and not eof(f) do
begin
last:=A[P[1]]; write(g, last);
read(f, A[1]);
if (A[1] < last) and (ch < MX) then
begin write(h, A[1]); ch:=ch+1 end
else
if A[1] < last then {ch=MX}
begin
outtree(g, A, n);
copyfa(h, A, n); ch:=0;
indbld(n);
end
else {A[1] last}indreorg(1, n)
end;
if n > 0 then outtree(g, A, n);
if ch > 0 then
begin
copyfa(h, A, n); ch:=0;
indbld(n); outtree(g, A, n)