програма підраховує кількість рядків в текстовому файлі (до 1000 000 рядків) і сортує його за двома першими буквами , а результат записує в тій же папкі із імям "OBR назва вхідного файла" . текстовий файл з 46068 рядками сортує сортуванням Вибору за 23 секунди а пузирковим сортуванням за 112 .Добавлено (25.03.13, 18:38) --------------------------------------------- program pz1;
uses crt ;
var i,a,b,c,d,n ,stroki : longint;
l,s ,h: string;
p,f:text;
k:array[1..1000000] of string;
{===================================}
procedure con_file;
begin
i:=length(l);
a:=0;
for n:=1 to i do if l[n]=#92 then a:=n;
h:=copy(l,0,a)+'OBR '+copy(l,a+1,i-a);
end;
{===================================}
procedure shit_file;
begin
writeln('введить путь к файлу , имя с розришениям');
readln(l);
assign(f,l);
stroki:=0;
reset(f);
while not eof(f) do
begin
readln(f,s);
k[stroki+1]:=s;
stroki:=stroki+1;
end;
close(f);
writeln('количество строк == ',stroki);
con_file; {назничение адреса для вих. файла}
end;
{===================================}
procedure zagon_v_fil;
begin
assign(p,h); {запись упорядоченой матрици}
rewrite(p);
for i:=1 to stroki do writeln(p,k[i]);
close(p)
end;
{===================================}
procedure sort_vibora; // сортировка вибора
begin
i:=1;c:=1;
while i <= stroki do
begin
d:=i;l:=k[i];
for b :=c to stroki do
begin
if (l[1] = k[b][1]) and (l[2] > k[b][2]) then
begin
l:=k[b];
d:=b;
end else
if l[1] > k[b][1] then
begin
l:=k[b];
d:=b;
end;
end;
s:=k[i];k[i]:=k[d];k[d]:=s; //замена местамы строк
c:=c+1;i:=i+1; //елементи щотчика цикла
end;
end;
{===================================}
procedure sort_puzir; {пузирькова сортировка}
begin
d:=1;
while d < stroki do
begin
i:=1;c:=2;
while i < stroki do
begin
if (k[i][1] = k[c][1]) and (k[i][2] > k[c][2]) then
begin
s:=k[i];k[i]:=k[c];k[c]:=s;
end else
if k[i][1] > k[c][1] then
begin
s:=k[i];k[i]:=k[c];k[c]:=s;
end;
i:=i+1;c:=c+1;
end;
d:=d+1;
end;
end;
{==================================}
begin
clrscr;
shit_file;
writeln('виберите сортировку (1- вибора 2-пузирькова )');
readln(i);
writeln('начало роботы пограми...');
if i=1 then sort_vibora else
if i=2 then sort_puzir else writeln('ошибка ввода');
zagon_v_fil;
writeln('робота програми завершена');
readln;
end.
Verhovny Menko
№ 1 | Автор: Verhovny_Menko |
2013-03-25, 18:38 | Изменено: Verhovny_Menko - Пн, 2013-03-25, 19:06
|
Репутация: [ + 7 ]
|
|
|