Code source complet : Implémentation du tri à bulles

Algorithmique > Algorithmes de tri > Tri à bulles [ Réagir ]

Informations

Implémentation du tri à bulles (code source du 2006-11-01) :
Implémentation standard du tri à bulles avec arrêt dès que la boucle principale n'a pas eu à permuter deux éléments.

Code source complet (Pascal)

{==============================================================================}
unit UBubbleSort;
{
                     Algorithme du "tri à bulles"

  Date          : 1 novembre 2006
  Documentation : http://www.uzit.fr/algorithmique/tri-bulles.html

--------------------------------------------------------------------------------

Utilisation de la procédure BubbleSort :
   * Paramètres : (A : Tableau à trier)
                  (N : Nombre d'éléments du tableau A)
   * Sortie     : (Aucune)
                  (Le tableau A passé en paramètre est trié)

Adaptations de la procédure BubbleSort :
   * Pour changer le type de données à trier, modifier les déclarations
     de type des types TMyType et TMyTypeArray
   * Pour modifier le critère de tri, adapter la fonction Compare() ;
     celle-ci renvoie TRUE si un élément de valeur (FirstValue) doit être placé
     avant un élément de valeur (SecondValue) dans le tableau trié
                                                                               }
{==============================================================================}

interface

type

  TMyType = Int64;
  TMyTypeArray = Array of TMyType;

  procedure BubbleSort(var A: TMyTypeArray; N: Integer);

  function Compare(FirstValue,SecondValue: TMyType): Boolean;

implementation

procedure BubbleSort(var A: TMyTypeArray; N: Integer);
var I,J: Integer;
    Tmp: TMyType;
    Sorted: Boolean;
begin

  I:=0;
  Sorted:=False;
  While (I<N) and (not Sorted) do
    begin
      Sorted:=True;
      For J:= N downto I+1 do
        if Compare(A[J],A[J-1]) then
          begin
            Tmp:=A[J];
            A[J]:=A[J-1];
            A[J-1]:=Tmp;
            Sorted:=False;
          end;
      Inc(I);
    end;

end;

function Compare(FirstValue,SecondValue: TMyType): Boolean;
begin

  Result:=(FirstValue<SecondValue);

end;

end.