%
%	Bubble Sort
%
procedure sort (var A: array 1..* of string, N:int)

var sorted: boolean

    for decreasing last: N..2
	sorted := true			% any interchanges this time?
	for i: 1..last-1
	    if A(i) > A(i+1) then	% interchange needed?
		sorted := false
		const foo := A(i)	% yes, do interchange
		A(i)   := A(i+1)
		A(i+1) := foo
	    end if
	end for
	exit when sorted
    end for
end sort
