Почему не работает сортировка методом пузырька, помогите пожалуйста?
USES
windows;
CONST
Size=32000;
TYPE
TArray=array[1..Size] of integer;
VAR
start, stop, res:int64; (*счетчик для windows*)
BaseArray: TArray;
Result:real;
i,j,k: integer;
esize:longint;
Procedure FillArray;
begin
case t of (* t задает тип заполнения *)
1:begin (* Упорядоченные *)
BaseArray[1] := MaxNumber;
for i := 2 to eSize do
BaseArray[i] := BaseArray[i-1]-random(MaxNumber div Size)-1
end;
2:begin (* Обратный порядок *)
BaseArray[1] := 1;
for i := 2 to eSize do
BaseArray[i] := BaseArray[i-1]+random(MaxNumber div Size)+1
end;
3: for i := 1 to eSize do (* Вырожденные *)
BaseArray[i] := random(12)+1;
4: for i := 1 to eSize do (* Случайные *)
BaseArray[i] := random(MaxNumber)+1
end;
end;
Procedure Exchange(ind1,ind2:integer);
var
tmp: integer;
begin
tmp:=BaseArray[ind1];
BaseArray[ind1]:=BaseArray[ind2];
BaseArray[ind2]:=tmp;
end;
Procedure Bubble;
var
UBound: integer;
EndFlag: boolean;
begin
Ubound:=eSize-1;
repeat
EndFlag:=true;
for i:=1 to Ubound do
if BaseArray[i]<BaseArray[i+1] then begin
Exchange(i,i+1);
EndFlag:=false;
end;
dec(Ubound);
until EndFlag;
end;
Procedure Check;
begin
for i:=1 to eSize-1 do
if BaseArray[i]<BaseArray[i+1] then begin
WriteLn('Error! Ошибка сортировки');
halt;
end;
end;
BEGIN
QueryPerformanceFrequency(res);
eSize:=1000;
repeat
FillArray;
QueryPerformanceCounter(start);
Bubble;
QueryPerformanceCounter(stop);
WriteLn('На ', eSize,' элементов затрачено ',(stop-start)/res:10:4,' секунд');
Check;
eSize:=eSize*2;
until eSize=64000;
j:=2;
repeat
eSize:=32000;
Result:=0;
for k:=1 to j do begin
FillArray;
QueryPerformanceCounter(start);
Bubble;
QueryPerformanceCounter(stop);
Result:=Result+(stop-start)/res;
Write('. ');
Check;
end;
WriteLn;
WriteLn('На ', eSize*j,' элементов затрачено ',Result:10:4,' секунд');
j:=j*2;
until j=64;
end.