Так можно упорядочить любую структуру данных. Надо только позаботиться о том, по какому критерию надо сортировать.
По убыванию? Пожалуйста! Поменяйте знак в процедуре Compare.
Код
program SortRec;
const N = 4;
type
TInfo = record
Age: integer; { возраст }
Name: string [20];
end;
List = array [1..N] of TInfo; { массив записей содержит возраст и имя }
{ сравнивать по возрасту }
function Compare (T1,T2: TInfo): integer;
begin
if T1.Age > T2.Age then Compare := 1
else if T1.Age = T2.Age then Compare := 0
else Compare := -1
end;
procedure QuickSort (var A: List; Lo, Hi: Integer);
var
i,j: integer;
x, y: TInfo;
procedure Sort (l, r: Integer);
begin
repeat
x := A[(l+r) shr 1];
i := l; j := r;
repeat
while Compare( A[i], x ) < 0 do inc(i);
while Compare( A[j], x ) > 0 do dec(j);
if i <= j then
begin
y := A[i]; A[i] := A[j]; A[j] := y;
inc(i); dec(j);
end;
until i > j;
if l < j then Sort (l, j);
l := i;
until l >= r;
end;
begin
Sort (Lo,Hi);
end; {QuickSort}
var
Data: List;
I: Integer;
begin { Main }
{ здесь заполнение массива записей }
QuickSort (Data, 1, N); { сортировка массива записей от 1-й до N-й записи }
{ здесь вывод на экран массива записей }
end.
const N = 4;
type
TInfo = record
Age: integer; { возраст }
Name: string [20];
end;
List = array [1..N] of TInfo; { массив записей содержит возраст и имя }
{ сравнивать по возрасту }
function Compare (T1,T2: TInfo): integer;
begin
if T1.Age > T2.Age then Compare := 1
else if T1.Age = T2.Age then Compare := 0
else Compare := -1
end;
procedure QuickSort (var A: List; Lo, Hi: Integer);
var
i,j: integer;
x, y: TInfo;
procedure Sort (l, r: Integer);
begin
repeat
x := A[(l+r) shr 1];
i := l; j := r;
repeat
while Compare( A[i], x ) < 0 do inc(i);
while Compare( A[j], x ) > 0 do dec(j);
if i <= j then
begin
y := A[i]; A[i] := A[j]; A[j] := y;
inc(i); dec(j);
end;
until i > j;
if l < j then Sort (l, j);
l := i;
until l >= r;
end;
begin
Sort (Lo,Hi);
end; {QuickSort}
var
Data: List;
I: Integer;
begin { Main }
{ здесь заполнение массива записей }
QuickSort (Data, 1, N); { сортировка массива записей от 1-й до N-й записи }
{ здесь вывод на экран массива записей }
end.
Если надо вывести список людей по алфавитному порядку, то здесь немного сложнее.
Код
function strcomp(Key1, Key2: String): Integer;
var i,m,c: integer;
begin
c:=0;
m:=length(Key1);
if m>length(Key2) then m:=length(Key2);
for i:=1 to m do
begin
c:=ord(Key1[i])-ord(Key2[i]);
if c<>0 then break;
end;
strcomp:=c
end;
var i,m,c: integer;
begin
c:=0;
m:=length(Key1);
if m>length(Key2) then m:=length(Key2);
for i:=1 to m do
begin
c:=ord(Key1[i])-ord(Key2[i]);
if c<>0 then break;
end;
strcomp:=c
end;
М | Программа выведена из FAQ-а, т.к. в функции strcomp была обнаружена ошибка... Подробности - здесь: Задача на слова |