Я написал процедуру сортировки вставки! Помогите её переделать в процедуру сортировки бинарными вставками!!
Procedure sortirovka_vstavkami(a:mas);
var
i,x,y,j:integer;
Begin
for i:=2 to n do begin
x:=a[i];
a[0]:=x;
j:=i;
while x<a[j-1] do begin
y:=y+1;
a[j]:=a[j-1];
j:=j-1;
end;
a[j]:=x;
end;
writeln('Sortirovka vstavkami');
for i:=1 to n do write(a[i]:5);
writeln;
writeln('Chislo sravnenii:',y);
End;
Зачем что-то ПЕРЕделывать, если можно взять уже сделанное?
http://alglib.sources.ru/sorting/bininssort.php
(там есть исходник на Дельфи, открой его в браузере, и изучай...)
Да ты что? Почему у меня тогда вот это:
const n = 20;выдало совершенно правильный результат:
var
X: array[0 .. pred(n)] of integer;
i: integer;
begin
for i := 0 to pred(n) do
X[i] := random(50);
for i := 0 to pred(n) do write(X[i]:3);
writeln;
BinaryInsertionSort(X, n);
for i := 0 to pred(n) do write(X[i]:3);
writeln;
end.
27 29 35 42 30 42 27 42 21 31 32 19 21 14 44 2 48 13 19 23
2 13 14 19 19 21 21 23 27 27 29 30 31 32 35 42 42 42 44 48
Вот моя прога:
Program sortirovka;
const
n=8;
type
mas=array[0..n] of integer;
var
a:mas;
i,j:integer;
Procedure binarnie_vstavki(a:mas);
var
x,i,j,y,l,m,r,v,k:integer;
Begin
i:=2;
repeat
l:=1;
r:=i-1;
m:=(l+r) div 2;
while l<>m do begin
if a[m-1]>a[i-1] then r:=m
else l:=m;
m:=(l+r) div 2;
end;
if a[l-1]<a[i-1] then begin
if a[i-1]>a[r-1] then l:=r+1
else l:=r;
end;
k:=i;
v:=a[i-1];
while k>l do begin
a[k-1]:=a[k-2];
k:=k-1;
end;
a[l-1]:=v;
i:=i+1;
Until not (i<=n);
writeln('Sortirovka binarnimi vstavkami');
for i:=1 to n do write(a[i]:5);
writeln;
writeln('Chislo sravnenii:',y);
End;
Begin
randomize;
writeln('Isxodnii massiv:');
for i:=1 to n do begin
a[i]:=random(50)-25;
write(a[i]:5);
end;
writeln;
binarnie_vstavki(a);
readln;
End.
Исходная матрица:
-1 11 5 24 21 18 23 8
Сортировка бинарными вставками:
0 5 11 18 21 23 24 8
Почему заполнение от 1 до n? Хотя в программе ЯСНО сказано: от 0 до n-1... Для кого это написано по-твоему?
Добавлено через 1 мин.
Я ж тебе даже пример привел, нет, ты опять по-своему делаешь... Зачем спрашиваешь тогда???