{ File: ordbubot.pas } { Scopo: ordinamento a bolle di un vettore (versione ottimizzata) } { E` richiesta la definizione preliminare di: const NumElementi = ...; type TipoElemento = ...; TipoIndice = 1..NumElementi; TipoVettore = array [TipoIndice] of TipoElemento; } procedure BubbleSort (var A: TipoVettore); { Ordina il vettore A usando l'algoritmo di ordinamento a bolle nella versione ottimizzata. } var i, j : integer; temp : TipoElemento; ordinato : boolean; begin { BubbleSort } i := 0; repeat { inizia fase i } i := i+1; ordinato := TRUE; for j := NumElementi downto i+1 do { cominciando dal basso ... } if A[j] < A[j-1] then { se due elementi non sono in ordine } begin { allora scambiali ... } temp := A[j]; A[j] := A[j-1]; A[j-1] := temp; ordinato := FALSE { e ricordati che non hai finito } end until ordinato; { e termina quando non hai fatto scambi } { N.B. Quando i assume il valore NumElementi, il ciclo interno non viene eseguito e quindi ordinato rimane a TRUE. } end; { BubbleSort }