Program Bubble_Sort_Array; Const Tam=10; Type Tipo_Vetor=Array[1..Tam] of Integer; Procedure Gera_Valores(Var V:Tipo_Vetor); Var cont:Integer; Begin For cont:=1 to Tam Do V[cont]:=random(10*Tam+1); End; Procedure Exibe_Valores(V:Tipo_Vetor); Var aux:integer; Begin for aux:=1 to Tam do begin write('V[',aux,']=',V[aux]); if aux <> Tam then write(', ') else writeln; end; End; Procedure Troca(Var A,B:Integer); Var aux:integer; Begin aux:=A; A:=B; B:=aux; End; Procedure Ordena_Bolha1(Var V:Tipo_Vetor); { Troca 2 a 2 sempre que necessario Move o menores para o inicio do vetor } Var i,j,aux:integer; Begin for i:=1 to Tam do for j:=i+1 to Tam do if V[i] > V[j] then begin aux:=V[i]; V[i]:=V[j]; V[j]:=aux; end; End; Procedure Ordena_Bolha2(Var V:Tipo_Vetor); { Acha o menor de todos do vetor e move para o inicio do vetor } Var i,j:integer; ind_menor:integer; Begin for i:=1 to Tam do begin ind_menor:=i; for j:=i+1 to Tam do if V[j] < V[ind_menor] then ind_menor:=j; troca(V[i],V[ind_menor]); end; End; Procedure Ordena_Bolha3(Var V:Tipo_Vetor); { Compara sempre 2 a 2 (vizinhos) e vai deslocando o maior para a extremidade } Var i,j:integer; ind_menor:integer; Begin for i:=Tam downto 2 do begin for j:=1 to i-1 do begin if V[j] > V[j+1] then troca(V[j],V[j+1]); end; end; End; Var Vetor:Tipo_Vetor; Begin Writeln; Writeln('>> ORDENACAO DE VETORES <<'); Writeln; writeln('Metodo da Bolha 1'); Gera_Valores(Vetor); Exibe_Valores(Vetor); Ordena_Bolha1(Vetor); Exibe_Valores(Vetor); writeln; writeln('Metodo da Bolha 2'); Gera_Valores(Vetor); Exibe_Valores(Vetor); Ordena_Bolha2(Vetor); Exibe_Valores(Vetor); writeln; writeln('Metodo da Bolha 3'); Gera_Valores(Vetor); Exibe_Valores(Vetor); Ordena_Bolha3(Vetor); Exibe_Valores(Vetor); readln; End.