Лидия Никольская
Лидия Никольская

Помогите немогу понять почему неработает сортировка Шелла .За любую помощь большое спасибо.



program lr1;

uses
crt;

const
m = 5;

type
DataItem = integer;
n = array [1..m] of DataItem;

var
z, g: integer;
mas: n;
proz: integer;
fail: file of integer;

procedure Bubble(var item: n; count: integer);{Пузирькова сортіровка}
var
i, j: integer;
x: DataItem;
begin
for i := 2 to count do
begin
for j := count downto i do
if item[j - 1] > item[j] then
begin
x := item[j - 1];
item[j - 1] := item[j];
item[j] := x;
end;
end;
end;{конец сортировки пузырьковым методом}

procedure Bubbleon(var item: n; count: integer);{Обратная пузирькова сортіровка}
var
i, j: integer;
x: DataItem;
begin
for i := 2 to count do
begin
for j := count downto i do
if item[j - 1] < item[j] then
begin
x := item[j - 1];
item[j - 1] := item[j];
item[j] := x;
end;
end;
end;{конец сортировки пузырьковым методом}

Procedure Shell(var item: n; count:integer);{Сортировки Шелла}
const
t = 5;
var
i, j, k, s, v: integer;
x: DataItem;
begin
for v := 1 to t do
begin

k:=mas[m];
s:=-k;
for i := k+1 to count do
begin
x := item;
j := i-k;
if s=0 then
begin
s := -k;
s := s+1;
item := x;
end;
while (x

begin
textcolor(2);

Assign(fail, 'D:\data.txt');
rewrite(fail);

Writeln('===========Файл рандом===========');

for z := 1 to m do
begin
mas[z] := Trunc(Random * 100) - 0;
Write(mas[z],'');
writeln ();
Write(fail, mas[z]);

end;

while not eof(fail) do
writeln(fail, mas[g]);

writeln('==========Тип сортировки=========');
writeln('0:Виход');
writeln('1:Пузирькова сортировка');
writeln('2:Обратная пузирькова сортировка ');
writeln('3:Cортировка Шелла ');
writeln('Введите цифру ');
readln(proz);
textcolor(7);
case proz of
0: Exit;
1: Bubble(mas, m);
2: Bubbleon(mas, m);
3: Shell (mas,m);
end;
for z := 1 to m do
writeln(mas[z]);
close(fail);
readln;

end.

ОД
Ольга Данилова

Много лишних констант, лишних переменных, лишних действий и плохой формат. От чего в твоем коде сложно разобраться.

Procedure Shell(var item: n; count:integer);
const
     t = 5;
var
     i, j, k, s, v: integer;
     x: DataItem;
begin
     k:=m;
     s:=k div 2;
     while s>0 do begin
         for i:=1 to k-s do begin
             j:=i;
             while (j>=1) and (item[j]>item[j+s]) do begin
                 v:=item[j];
                 item[j]:=item[j+s];
                 item[j+s]:=v;
                 dec(j);
             end;
         end;
         s:=s div 2;
     end;
end;

Анатолий
Анатолий

Говнокод, имхо.

Выкладывай на pastebin.com

P.S. Твой алгоритм Шелла какой-то левый, ищи другой.

Похожие вопросы
Помогите разобраться почему не работает пузырьковая сортировка
Немогу запустить винду !!!помогите безопасный режим неработает
Помогите с сортировкой в pascal.
помогите с сортировкой на Си
Помогите с сортировкой Pascal
Помогите с сортировкой по алфовиту в с++
Помогите! Немогу понять!
Сортировка Шелла на Си
помогите разабраться почему неработает программка.
подскажите пожалуйста что изменить в коде быстрой сортировки методом Шелла С#