Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы / laba2 / QuiSort
.PAS {¬Ґв®¤ ЄгзЁ}
uses CRT;
type
arrsort= array[0..1200] of integer;
var
arr, arr1: arrsort; {Њ ббЁў arr1 㦥 Є Є Є®ЇЁп ¬ ббЁў rr}
rez: array [1..2, 2..1200] of integer; {Њ ббЁў б १г«мв в ¬Ё}
str: string[1];
k: integer;
j: 1..3;
fin: text;
{Ђ «Ё§ १г«мв в®ў. ’® Ґбвм Ї®ЁбЄ Ё¬Ґм襣® Є®«-ў ЁвҐа ©Ёж Ё ®Ў¬Ґ®ў
Џ® бгвЁ rez - ўе®¤пйЁ© ¬ ббЁў.
Џа®жҐ¤га Їа®б¬ ваЁў Ґв ¬ ббЁў १г«мв в®ў Ё 室Ёв зЁб«®,
а ў®Ґ ®в®иҐЁо ®в१Є®ў, Є®в®алҐ ¤Ґ«Ёвбп ¬ ббЁў,
ЇаЁ Є®в®а®¬ ¤®бвЁЈ Ґвбп Ё¬Ґм襥 Є®«ЁзҐбвў® ®Ў¬Ґ®ў Ё ЁвҐа жЁ©}
Procedure analiz;
var ob, obrez, it, itrez, i: integer;
begin
ob:=2;
obrez:=rez[2, 2]; {ЃҐаҐ¬ з «млҐ § 票п}
it:=2;
itrez:=rez[1, 2];
for i:= 3 to ((arr[0] div 2) + 1 ) do {€ ЁйҐ¬ Ї® жЁЄ¤г...}
begin
if obrez > rez[2, i] then { Ё¬Ґм襥 Є®«-ў® ®Ў¬Ґ®ў}
begin
obrez:= rez[2, i];
ob:=i;
end;
if itrez > rez[1, i] then {€ ЁвҐа жЁ©}
begin
itrez:= rez[1, i];
it:=i; {€ г§ с¬ Є®нддЁжҐв}
end;
end;
writeln(fin, 'Ќ Ё¬Ґм襥 Є®«ЁзҐбвў® ЁвҐа жЁ© ЇаЁ k = ', it, ' а ў® ', itrez);
writeln(fin, 'Ќ Ё¬Ґм襥 Є®«ЁзҐбвў® ®Ў¬Ґ®ў ЇаЁ k = ', ob, ' а ў® ', obrez);
writeln('Ќ Ё¬Ґм襥 Є®«ЁзҐбвў® ЁвҐа жЁ© ЇаЁ k = ', it, ' а ў® ', itrez);
writeln('Ќ Ё¬Ґм襥 Є®«ЁзҐбвў® ®Ў¬Ґ®ў ЇаЁ k = ', ob, ' а ў® ', obrez);
writeln;
end;
{ѓҐҐа жЁп ¬ ббЁў .
‚室®Ґ ¤ ®Ґ - б ¬ ¬ ббЁў.
J - ўҐ«ЁзЁ е а ЄвҐаЁ§гой п ¬ ббЁў
}
Procedure enter(var arr: arrsort; j: integer);
var
i: integer;
begin
Case j of
1: begin
Write('‚Ћ‡ђЂ‘’Ђћ™€‰');
Write(fin, '‚Ћ‡ђЂ‘’Ђћ™€‰');
for i:=1 to arr[0] do
arr[i]:=i;
end;
2: begin
Write('“Ѓ›‚Ђћ™€‰');
Write(fin, '“Ѓ›‚Ђћ™€‰');
for i:=1 to arr[0] do
arr[i]:=arr[0]-i;
end;
3: begin
Write('‘‹“—Ђ‰Ќ›‰');
Write(fin, '‘‹“—Ђ‰Ќ›‰');
for i:=1 to arr[0] do
arr[i]:=random(arr[0]);
end;
end;
Writeln(fin, ' ЊЂ‘‘€‚');
Writeln(' ЊЂ‘‘€‚');
end;
{‘ ¬ б®авЁа®ўЄ . ‚室®Ґ ¤ ®Ґ - Є®нддЁжҐв, а ўл© ®в®иҐЁо ¤«Ё ®в१Є®ў, Є®в®алҐ ¤Ґ«Ёвбп ¬ ббЁў}
procedure Quicksort(k:integer);
procedure Sort(var arr: arrsort; l,r:integer);
var i,j:integer; x,w:integer;
begin
{гбв ®ўЄ Ја Ёж а §¤Ґ«ҐЁп}
i:=l;
j:=r;
{ўлЎ®а Ў амҐа x}
x := arr[l+(r-l) div k];
{а §¤Ґ«ҐЁҐ н«Ґ¬Ґв®ў ®в-® x}
repeat
{Ї®ЁбЄ н«Ґ¬Ґв®ў ¤«п ®Ў¬Ґ }
while arr[i] < x do i:=i+1;
while x < arr[j] do j:=j-1;
rez[1, k]:=rez[1, k]+1; {“ўҐ«ЁзЁў Ґ¬ бзсвзЁЄ Є®«-ў ЁвҐа жЁ©}
if i<j then
begin
rez[2, k]:=rez[2, k]+1; {€ ®Ў¬Ґ®ў}
{®Ў¬Ґ [i] Ё a[j] }
w:=arr[i]; arr[i]:=arr[j]; arr[j]:=w;
i:=i+1; j:=j-1
end;
i:=i+1; j:=j-1
until i > j;
if l < j then Sort(arr,l,j);
if i < r then Sort(arr, i,r)
end;{Sort}
begin
rez[1, k]:=0; {ЋЎг«пҐ¬ бзсвзЁЄЁ Є®«-ў ЁвҐа жЁ©}
rez[2, k]:=0; {€ ®Ў¬Ґ®ў}
Sort(arr1, 1, arr[0]);
writeln(fin, 'ЏаЁ k = ', k, ' Є®«ЁзҐбвў® ЁвҐа жЁ© а ў® ', rez[1, k], ', ®Ў¬Ґ®ў = ', rez[2, k]);
end;
begin
randomize; {ЊҐи Ґ¬ зЁб« }
assign(fin, 'F:\tpascal\2semestr\laba2\arr.txt'); {” ©«, ў Є®в®ал© Ўг¤Ґв ЇЁб вмбп
§ ўЁбЁ¬®бвм Є®«-ў ЁвҐа жЁ© Ё ®Ў¬Ґ®ў ®в Є®нддЁжҐв Ё гЇ®а冷祮бвЁ ¬ ббЁў }
rewrite(fin);
repeat
{---‚ў®¤ ¬ ббЁў ---}
repeat {‘Їа иЁў Ґ¬ ¤«Ёг ¬ ббЁў }
write('‚ўҐ¤ЁвҐ ¤«Ёг ¬ ббЁў : ');
readln(arr[0]);
until ((arr[0]> 0) and (arr[0]<= 1200));
writeln('‚ ¬ ббЁўҐ ', arr[0], ' н«Ґ¬Ґв®ў');
writeln;
for j:=1 to 3 do {ЏҐаҐЎЁа Ґ¬ ¬ ббЁўл ўбҐе 3 вЁЇ®ў}
begin
enter(arr, j); {ѓҐҐаЁ¬ ¬ ббЁў}
for k:=2 to ((arr[0] div 2) + 1 ) do {‚лЎЁа Ґ¬ Є®нддЁжҐв ®в 2(Џ®в®¬г зв® 1 - нв® Ї® бгвЁ Ґ ¤Ґ«ҐЁҐ.)
¤® ®вйЁЇ«ҐЁп Ї® 1 н«-вг. ЃҐаҐ¬ ¤Ґ«ҐЁҐ 2 в-Є ў бЁ«г бЁ¬¬ҐваЁЁ १г«мв ⠡㤥⠤㡫Ёа®ў вмбп }
begin
arr1:=arr; {Љ®ЇЁа㥬 ¬ ббЁў!!!}
QuickSort(k);
end;
Writeln('Ђ «Ё§ १г«мв в®ў');
analiz; {€ «Ё§Ёа㥬 १г«мв вл}
end;
repeat
textcolor(2); writeln('Џ®ўв®аЁвм? Y Ё«Ё N?');
textcolor(7); readln(str);
until (str='Y') or (str='y') or (str='n') or (str='N');
until(str = 'n') or (str='N');
end.
{ЋЈа ЁзҐЁҐ ў 1200 н«Ґ¬Ґв®ў бЁ«м® § ўл襮. Џа ЄвЁзҐбЄЁ ЇаЁ¬Ґа® 500 н«Ґ¬Ґв®ў. Џа®Ја ¬¬ ўлЇЁблў Ґв ў д ©« бва®Єг ўЁ¤
'ЏаЁ k = ____ Є®«ЁзҐбвў® ЁвҐа жЁ© а ў® ____ ®Ў¬Ґ®ў = ____' Ј¤Ґ Є - Є®нддЁжҐв, а ўл© ®в®иҐЁо ¤«Ё ¬ ббЁў®ў Ї®б«Ґ ¤Ґ«ҐЁп 2 з бвЁ.
Џ®б«Ґ нв®Ј® 室Ёвбп Ё¬Ґм襥 Є®«-ў® ЁвҐа жЁ© Ё ®Ў¬Ґ®ў Ё ўлў®¤пвбп ᮮ⢥вбвўгойЁҐ Ё¬ Є®нддЁжҐвл.
‚ ЇаЁжЁЇҐ ¬®¦® а бᬮваҐвм ҐйҐ Ё Ї®«м§®ў ⥫мбЄЁ© ¬ ббЁў Ё ¬ ббЁў - б ¬л© Ї«®е®© ў аЁ в, Ј¤Ґ Ўг¤Ґв ЁЎ®«м襥 Є®«-ў® ®Ў¬Ґ®ў. Ќ ЇаЁ¬Ґа arr[8] = [3,5,7,8,6,4,2,1]}
uses CRT;
type
arrsort= array[0..1200] of integer;
var
arr, arr1: arrsort; {Њ ббЁў arr1 㦥 Є Є Є®ЇЁп ¬ ббЁў rr}
rez: array [1..2, 2..1200] of integer; {Њ ббЁў б १г«мв в ¬Ё}
str: string[1];
k: integer;
j: 1..3;
fin: text;
{Ђ «Ё§ १г«мв в®ў. ’® Ґбвм Ї®ЁбЄ Ё¬Ґм襣® Є®«-ў ЁвҐа ©Ёж Ё ®Ў¬Ґ®ў
Џ® бгвЁ rez - ўе®¤пйЁ© ¬ ббЁў.
Џа®жҐ¤га Їа®б¬ ваЁў Ґв ¬ ббЁў १г«мв в®ў Ё 室Ёв зЁб«®,
а ў®Ґ ®в®иҐЁо ®в१Є®ў, Є®в®алҐ ¤Ґ«Ёвбп ¬ ббЁў,
ЇаЁ Є®в®а®¬ ¤®бвЁЈ Ґвбп Ё¬Ґм襥 Є®«ЁзҐбвў® ®Ў¬Ґ®ў Ё ЁвҐа жЁ©}
Procedure analiz;
var ob, obrez, it, itrez, i: integer;
begin
ob:=2;
obrez:=rez[2, 2]; {ЃҐаҐ¬ з «млҐ § 票п}
it:=2;
itrez:=rez[1, 2];
for i:= 3 to ((arr[0] div 2) + 1 ) do {€ ЁйҐ¬ Ї® жЁЄ¤г...}
begin
if obrez > rez[2, i] then { Ё¬Ґм襥 Є®«-ў® ®Ў¬Ґ®ў}
begin
obrez:= rez[2, i];
ob:=i;
end;
if itrez > rez[1, i] then {€ ЁвҐа жЁ©}
begin
itrez:= rez[1, i];
it:=i; {€ г§ с¬ Є®нддЁжҐв}
end;
end;
writeln(fin, 'Ќ Ё¬Ґм襥 Є®«ЁзҐбвў® ЁвҐа жЁ© ЇаЁ k = ', it, ' а ў® ', itrez);
writeln(fin, 'Ќ Ё¬Ґм襥 Є®«ЁзҐбвў® ®Ў¬Ґ®ў ЇаЁ k = ', ob, ' а ў® ', obrez);
writeln('Ќ Ё¬Ґм襥 Є®«ЁзҐбвў® ЁвҐа жЁ© ЇаЁ k = ', it, ' а ў® ', itrez);
writeln('Ќ Ё¬Ґм襥 Є®«ЁзҐбвў® ®Ў¬Ґ®ў ЇаЁ k = ', ob, ' а ў® ', obrez);
writeln;
end;
{ѓҐҐа жЁп ¬ ббЁў .
‚室®Ґ ¤ ®Ґ - б ¬ ¬ ббЁў.
J - ўҐ«ЁзЁ е а ЄвҐаЁ§гой п ¬ ббЁў
}
Procedure enter(var arr: arrsort; j: integer);
var
i: integer;
begin
Case j of
1: begin
Write('‚Ћ‡ђЂ‘’Ђћ™€‰');
Write(fin, '‚Ћ‡ђЂ‘’Ђћ™€‰');
for i:=1 to arr[0] do
arr[i]:=i;
end;
2: begin
Write('“Ѓ›‚Ђћ™€‰');
Write(fin, '“Ѓ›‚Ђћ™€‰');
for i:=1 to arr[0] do
arr[i]:=arr[0]-i;
end;
3: begin
Write('‘‹“—Ђ‰Ќ›‰');
Write(fin, '‘‹“—Ђ‰Ќ›‰');
for i:=1 to arr[0] do
arr[i]:=random(arr[0]);
end;
end;
Writeln(fin, ' ЊЂ‘‘€‚');
Writeln(' ЊЂ‘‘€‚');
end;
{‘ ¬ б®авЁа®ўЄ . ‚室®Ґ ¤ ®Ґ - Є®нддЁжҐв, а ўл© ®в®иҐЁо ¤«Ё ®в१Є®ў, Є®в®алҐ ¤Ґ«Ёвбп ¬ ббЁў}
procedure Quicksort(k:integer);
procedure Sort(var arr: arrsort; l,r:integer);
var i,j:integer; x,w:integer;
begin
{гбв ®ўЄ Ја Ёж а §¤Ґ«ҐЁп}
i:=l;
j:=r;
{ўлЎ®а Ў амҐа x}
x := arr[l+(r-l) div k];
{а §¤Ґ«ҐЁҐ н«Ґ¬Ґв®ў ®в-® x}
repeat
{Ї®ЁбЄ н«Ґ¬Ґв®ў ¤«п ®Ў¬Ґ }
while arr[i] < x do i:=i+1;
while x < arr[j] do j:=j-1;
rez[1, k]:=rez[1, k]+1; {“ўҐ«ЁзЁў Ґ¬ бзсвзЁЄ Є®«-ў ЁвҐа жЁ©}
if i<j then
begin
rez[2, k]:=rez[2, k]+1; {€ ®Ў¬Ґ®ў}
{®Ў¬Ґ [i] Ё a[j] }
w:=arr[i]; arr[i]:=arr[j]; arr[j]:=w;
i:=i+1; j:=j-1
end;
i:=i+1; j:=j-1
until i > j;
if l < j then Sort(arr,l,j);
if i < r then Sort(arr, i,r)
end;{Sort}
begin
rez[1, k]:=0; {ЋЎг«пҐ¬ бзсвзЁЄЁ Є®«-ў ЁвҐа жЁ©}
rez[2, k]:=0; {€ ®Ў¬Ґ®ў}
Sort(arr1, 1, arr[0]);
writeln(fin, 'ЏаЁ k = ', k, ' Є®«ЁзҐбвў® ЁвҐа жЁ© а ў® ', rez[1, k], ', ®Ў¬Ґ®ў = ', rez[2, k]);
end;
begin
randomize; {ЊҐи Ґ¬ зЁб« }
assign(fin, 'F:\tpascal\2semestr\laba2\arr.txt'); {” ©«, ў Є®в®ал© Ўг¤Ґв ЇЁб вмбп
§ ўЁбЁ¬®бвм Є®«-ў ЁвҐа жЁ© Ё ®Ў¬Ґ®ў ®в Є®нддЁжҐв Ё гЇ®а冷祮бвЁ ¬ ббЁў }
rewrite(fin);
repeat
{---‚ў®¤ ¬ ббЁў ---}
repeat {‘Їа иЁў Ґ¬ ¤«Ёг ¬ ббЁў }
write('‚ўҐ¤ЁвҐ ¤«Ёг ¬ ббЁў : ');
readln(arr[0]);
until ((arr[0]> 0) and (arr[0]<= 1200));
writeln('‚ ¬ ббЁўҐ ', arr[0], ' н«Ґ¬Ґв®ў');
writeln;
for j:=1 to 3 do {ЏҐаҐЎЁа Ґ¬ ¬ ббЁўл ўбҐе 3 вЁЇ®ў}
begin
enter(arr, j); {ѓҐҐаЁ¬ ¬ ббЁў}
for k:=2 to ((arr[0] div 2) + 1 ) do {‚лЎЁа Ґ¬ Є®нддЁжҐв ®в 2(Џ®в®¬г зв® 1 - нв® Ї® бгвЁ Ґ ¤Ґ«ҐЁҐ.)
¤® ®вйЁЇ«ҐЁп Ї® 1 н«-вг. ЃҐаҐ¬ ¤Ґ«ҐЁҐ 2 в-Є ў бЁ«г бЁ¬¬ҐваЁЁ १г«мв ⠡㤥⠤㡫Ёа®ў вмбп }
begin
arr1:=arr; {Љ®ЇЁа㥬 ¬ ббЁў!!!}
QuickSort(k);
end;
Writeln('Ђ «Ё§ १г«мв в®ў');
analiz; {€ «Ё§Ёа㥬 १г«мв вл}
end;
repeat
textcolor(2); writeln('Џ®ўв®аЁвм? Y Ё«Ё N?');
textcolor(7); readln(str);
until (str='Y') or (str='y') or (str='n') or (str='N');
until(str = 'n') or (str='N');
end.
{ЋЈа ЁзҐЁҐ ў 1200 н«Ґ¬Ґв®ў бЁ«м® § ўл襮. Џа ЄвЁзҐбЄЁ ЇаЁ¬Ґа® 500 н«Ґ¬Ґв®ў. Џа®Ја ¬¬ ўлЇЁблў Ґв ў д ©« бва®Єг ўЁ¤
'ЏаЁ k = ____ Є®«ЁзҐбвў® ЁвҐа жЁ© а ў® ____ ®Ў¬Ґ®ў = ____' Ј¤Ґ Є - Є®нддЁжҐв, а ўл© ®в®иҐЁо ¤«Ё ¬ ббЁў®ў Ї®б«Ґ ¤Ґ«ҐЁп 2 з бвЁ.
Џ®б«Ґ нв®Ј® 室Ёвбп Ё¬Ґм襥 Є®«-ў® ЁвҐа жЁ© Ё ®Ў¬Ґ®ў Ё ўлў®¤пвбп ᮮ⢥вбвўгойЁҐ Ё¬ Є®нддЁжҐвл.
‚ ЇаЁжЁЇҐ ¬®¦® а бᬮваҐвм ҐйҐ Ё Ї®«м§®ў ⥫мбЄЁ© ¬ ббЁў Ё ¬ ббЁў - б ¬л© Ї«®е®© ў аЁ в, Ј¤Ґ Ўг¤Ґв ЁЎ®«м襥 Є®«-ў® ®Ў¬Ґ®ў. Ќ ЇаЁ¬Ґа arr[8] = [3,5,7,8,6,4,2,1]}