Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > сортировка вставками


Автор: Frogs2009 20.6.2008, 15:05
Сортировка вставками. Дана последовательность чисел a1, a2, …, an. Требуется переставить числа в порядке возрастания. Делается это следующим образом. Пусть a1, a2,…, ai упорядо-ченная последовательность, т.е. a1 ≤ a2 ≤…≤ ai. Берется сле-дующее число аi+1 и вставляется в последовательность так, чтобы новая последовательность была тоже возрастающей. Процесс производится до тех пор, пока все элементы от i+1 до n не будут перебраны. Примечание. Место помещения очередного элемента в сортировочную часть производить с помощью двоичного поиска. Двоичный поиск оформить в ви-де отдельной функции.



Код

procedure BinaryInsertionSort(var Arr : array of Real; N : Integer);
var
B,C,E,I,J,K : Integer;
Tmp : Real;
begin
i:=2;
repeat
b:=1;
e:=i-1;
c:=((b+e) div 2);
while b<>c do
begin
if Arr[c-1]>Arr[i-1] then e:=c
else b:=c;
c:=((b+e) div 2);
end;
if Arr[b-1]<Arr[i-1] then
begin
if Arr[i-1]>Arr[e-1]
then b:=e+1
else b:=e;
end;
k:=i;
Tmp:=Arr[i-1];
while k>b do
begin
Arr[k-1]:=Arr[k-1-1];
dec(k)
end;
Arr[b-1]:=Tmp;
inc(i);
until not(i<=n);
end.

помогите пожалуйста, что дальше делать, подскажите! заранее спасибо!

Автор: deswars 24.6.2008, 13:46
Попробуй такой кодhttp://forum.vingrad.ru/html/emoticons/pack/smile.gif:
Код

procedure InsSort(var Arr:array[{...}] of Real; N:integer);
{сортировка масива}
 var
  i,m,k,xinteger;
 begin
  for i:=2 to n do 
   begin
    x:=BynSearch(arr,i-1,arr[i]);
    m:=arr[i];
    for k:=i downto x+1 do
      a[k]:=a[k-1];
    a[x]:=m;
   end;
 end;

function BinSearch(arr:array[{...}] of real; n:integer; key:real):integer;
{Бинарный поиск
передается масив, длинна масива и ключ;
возвращается место вставки }
 var
  a,b,c:integer;
 begin
  a:=1;
  b:=n;
  c:=(b+e) div 2;
  while a<>b do 
   begin
    if arr[c]>key then
      b:=c;
     else
       a:=c;
    c:=(a+b) div 2;
   end;
  BinSearch:=c;
 end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)