Добрый день!Помогите плиз надо сделать прогу на паскале.
Метод СОРТИРОВКА ВСТАВКАМИ.Дана возраст. посл-ть a1<a2<..<an.Берем новое число an+1 и помещаем его в исход. посл-ть так,чтоб новая посл. тоже была возраст-ей.
Место помещения очередного элемента в отсортир-ую часть производить с помощью двоич. поиска!двоичный поиск оформить в виде отдельной функции!
var i,x,j, count: integer; size, left, right, center: integer; a:
array[1 .. 100]
of integer;
begin
write('vvedite size'); readln(size); writeln('vvedite elementi');
for i:=1
to size
do readln(a[i]); writeln ('vvedite X'); readln (x);
if x>a[size]
then a[size+1]:=x;
if x<a[1]
then
begin
for j:=size
downto 1
do a[j+1]:=a[j]; a[1]:=x;
end
else
begin left := 1; right := size;
repeat center := (right + left)
div 2; inc(count);
if a[ center ] >= X
then right := center
else left := center;
until (right - left = 1)
or (a[ center ] = X);
for i := size + 1
downto center
do a[i] := a[i - 1]; a[ center ] := X;
end; writeln('count = ', count);
for i:=1
to size+1
do
write (' ',a[i]); writeln; readln;
end.
а что ты пробовал делать?
чтобы говорить, что не получается, надо хотя бы начать.
if x<a[1]
then
begin
for j:=size
downto 1
do a[j+1]:=a[j]; a[1]:=x;
end
else
begin left := 1; right := size;
repeat center := (right + left)
div 2; inc(count);
if a[ center ] >= X
then right := center
else left := center;
until (right - left = 1)
or (a[ center ] = X);
for i := size + 1
downto center
do a[i] := a[i - 1]; a[ center ] := X;
end; writeln('count = ', count);
ты путаешь массив и диапазон.
диапазон - это вот так: 1..5, 9..17
возвращать массив вполне можно. и передавать тоже... как это сделать ты можешь прочитать в FAQ
хотя в моем понимании двоичный поиск должен возвращать номер позиции, на которую надо вставить элемент.
Ура прога работает,сделал!!!
Uses Crt;
type
arrtype=array[1 .. 100] of integer;
Function Bin_Search(a:arrtype;size,x:integer):integer;
Var left, right, center: integer;
begin
left := 1; right := size;
repeat center := (right + left)
div 2;
if a[ center ] >= X
then right := center
else left := center;
until (right - left = 1) or (a[ center ] = X);
bin_search:=center;
end;
var a:arrtype; i,x,j,center: integer; size: integer;
begin ClrScr;
write('vvedite size '); readln(size); writeln('vvedite elementi');
for i:=1
to size
do readln(a[i]); writeln ('vvedite X'); readln (x);
if x>a[size]
then a[size+1]:=x;
if x<a[1]
then
begin
for j:=size
downto 1
do a[j+1]:=a[j]; a[1]:=x;
end
else
begin
center:=Bin_Search(a,size,x);
for i := size + 1
downto center
do a[i] := a[i - 1];
a[ center ] := X;
end;
for i:=1
to size+1
do
write (' ',a[i]); writeln; readln;
end.