Необходимо сделать сортировку массива из 100, 1000, 10000, 100000 элементов алгоритмами бинарных вставок и шелла. Бинарные вставки получилось реализовать, а вот алгоритм Шелла, по непонятным мне причинам, на 100000 перестает работать и выкидывает из проги, хотя для 100-10000 элементов отрабатывает "на ура".
Процедура алгоритма Шелла:
Код:
procedure ShellSort(var pArr :PSortArrType; var result :ResultType);
var
i, j,m,k,s,x :Integer;
tmp :Integer;
start : Real;
h:array[1..40000] of integer;
begin
Writeln('ShellSort: Array size = ', pArr^.len);
start := GetMilliSeconds;
with pArr^, result do begin
m:=1;
h[1]:=1;
while h[m]<((len-1) div 3) do
begin
h[m+1]:=2*h[m]+1;
m:=m+1;
end;
tmp:=m;
for m:=tmp downto 1 do
begin
k:=h[m]; s:=-k;
for i:=k+1 to len do
begin
x:=data[i]; j:=i-k;
if s=0 then s:=-k;
s:=s+1; data[s]:=x;
Inc(comps);
while x<data[j] do
begin
data[j+k]:=data[j]; j:=j-k;
Inc(comps);
Inc(moves);
end;
data[j+k]:=x; Inc(moves);
end
end
end;
//Inc(moves);
//Inc(comps);
result.time := GetMilliSeconds - start;
end; {ShellSort}
Помогите, пожалуйста, разобраться, почему программа не отрабатывает для 100000 элементов (ошибка: Exception EAccessViolation in module Laba3.exe at 00008c2a
Access violation at address 00408c2a in module 'laba3.exe'. Write of address 017c9c50)?
Программа делалась на делфи 7, в виде консольного приложения винды. Полный текст проги прилагается. Буду благодарен за любую помощь, так как самому разобраться не получается в виду малого опыта в программировании.