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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
-------------------------------------------------------------------------------
-- --
-- Ada Interface to the X Window System and Motif(tm)/Lesstif --
-- Copyright (c) 1996-2000 Hans-Frieder Vogt --
-- --
-- This program is free software; you can redistribute it and/or modify --
-- it under the terms of the GNU General Public License as published by --
-- the Free Software Foundation; either version 2 of the License, or --
-- (at your option) any later version. --
-- --
-- This program is distributed in the hope that it will be useful, --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
-- See the GNU General Public License for more details. --
-- --
-- You should have received a copy of the GNU General Public License --
-- along with this program; if not, write to the --
-- Free Software Foundation, Inc., --
-- 59 Temple Place - Suite 330, --
-- Boston, MA 02111-1307, USA. --
-- --
-- --
-- X Window System is copyrighted by the X Consortium --
-- Motif(tm) is copyrighted by the Open Software Foundation, Inc. --
-- --
-- --
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
-- HISTORY:
-- June 20, 1998 begin of history
--
-------------------------------------------------------------------------------
procedure Quick_Sort (C : in out Collection) is
procedure Sort (Left, Right : in Index);
procedure Sort (Left, Right : in Index) is
I, J : Index;
Temp, X : Item;
begin
I := Left;
J := Right;
X := C(Index'Val ((Index'Pos (Left) + Index'Pos (Right)) / 2));
loop
while C (I) < X loop
I := Index'Succ (I);
end loop;
while X < C (J) loop
J := Index'Pred (J);
end loop;
if I < J then
Temp := C (I);
C (I) := C (J);
C (J) := Temp;
I := Index'Succ (I);
J := Index'Pred (J);
elsif I = J then
if I < Right then
I := Index'Succ (I);
end if;
if J > Left then
J := Index'Pred (J);
end if;
exit;
else
exit;
end if;
end loop;
if Left < J then
Sort (Left, J);
end if;
if I < Right then
Sort (I, Right);
end if;
end Sort;
begin
Sort (C'First, C'Last);
end Quick_Sort;
|