1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| procedure TForm1.Button2Click(Sender: TObject);
begin
TriRapide(1, stringgrid1.RowCount - 1);
end;
function TriPartition(Grid1: TStringGrid; premier, dernier: integer): integer;
var
i: integer;
j: integer;
pivot, temp: string;
begin
with Grid1 do
begin
i := premier - 1;
j := dernier;
pivot := cells[0, dernier];
repeat
repeat
i := i + 1
until AnsiCompareText(Cells[0, i], pivot) >= 0;
repeat
j := j - 1
until AnsiCompareText(Cells[0, j], pivot) <= 0;
temp := rows[i].Text;
rows[i].Text := rows[j].Text;
rows[j].Text := temp;
until j <= i;
rows[j].Text := rows[i].Text;
rows[i].Text := rows[dernier].Text;
rows[dernier].Text := temp;
Result := i;
end;
end;
procedure TForm1.TriRapide(premier, dernier: integer);
var
i: integer;
begin
if dernier > premier then
begin
i := TriPartition(StringGrid1, premier, dernier);
TriRapide(premier, i - 1);
TriRapide(i + 1, dernier);
end;
end; |
Partager