Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > сортировка пузырьком


Автор: kuzyonok 25.4.2006, 18:50
Есть примерный алгоритм сортировки улучшенным пузырьком (шейкера). но что то он не работает. не до конца сортирует. ПОМОГИТЕ!!!!!Пожалуйста!

Код

Procedure SortArray ( var DynArray : TArrayType ) ;
  var
    i , j , Temp, left, right : integer ;
  begin
  left:=2;
  right:=high ( DynArray );
  j:=high ( DynArray );
  repeat
  for i:=right downto left-1 do
  begin
   if DynArray[i-1]>DynArray[i] then
   begin
    Temp := DynArray [ i-1 ] ;
    DynArray [ i -1] := DynArray [ i ] ;
    DynArray [ i ] := Temp;
    j:=i;
   end;
  end;
   left:=i+1; 
   for i:=left to right+1 do
   begin
   if DynArray[i-1]>DynArray[i] then
   begin
    Temp := DynArray [ i-1 ] ;
    DynArray [ i -1] := DynArray [ i ] ;
    DynArray [ i ] := Temp ;
    j:=i;
    end;
    end;
    right:=j-1;
   until left>right
  end ; 
 

Автор: Albinos_x 25.4.2006, 19:46
что означает: не до конца?
и как определяется TArrayType ? 

Автор: Albinos_x 25.4.2006, 20:49
если я правильно понял идею:
Код

Type
   TArrayType = array of integer;

Procedure SortArray ( var DynArray : TArrayType ) ;
  var
    i,r,l,Temp,left,right:integer ;
  begin
  left:=1;
  l:=1;
  right:=length( DynArray );
  r:=right;
repeat
   for i:=left to right-1 do
      begin
      if DynArray[right-i-1]>DynArray[right-i] then
         begin
         Temp:=DynArray[right-i-1] ;
         DynArray [right-i-1]:=DynArray [right-i] ;
         DynArray [right-i]:=Temp;
         l:=right-i-1;
         end;
      if DynArray[i-1]>DynArray[i] then
         begin
         Temp:=DynArray[i-1] ;
         DynArray[i-1]:=DynArray[i];
         DynArray[i]:=Temp;
         r:=i+1;
         end;
      end;
    r:=r-1;
    right:=r;
    l:=l+1;
    left:=l;
   until left>=right
end ;


PS: пользуйтесь тегами [code=delphi] 

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