Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизСнова Paskal Найти похожие ветки
← →
tytus (2005-11-24 09:48) [0]Разобрался я с однонаправленным списком в памяти - всем спасибо! Как этот список отсортировать по убыванию (список состоит из записей, одна из них - год (integer)).
← →
alex_*** © (2005-11-24 10:12) [1]пузырьком
← →
MBo © (2005-11-24 13:10) [2]вставками или слиянием
← →
TUser © (2005-11-24 14:20) [3]Цифровой сортировкой. Будет in-place и за линейное время.
← →
TUser © (2005-11-24 16:02) [4]Вот тебе пример - и создание и цифровая сортировка
program num;
{$apptype console}
uses SysUtils;
type
PArray = ^TArray;
TArray =
record
Value: integer;
Next: PArray;
end;
const Len = 10;
procedure Init (var A: PArray);
var t: PArray;
i: integer;
begin
Randomize;
for i:=1 to Len do begin
New (t);
t^.Value:=random(25);
t^.Next:=A;
A:=t;
end;
end;
procedure Print (A: PArray);
begin
while A <> nil do begin
write (inttostr(A^.Value));
A:=A^.Next;
if A <> nil then write (#9);
end;
writeln;
end;
procedure Sort (var A: PArray);
var i: integer;
n: integer;
t, t1, t2: PArray;
atail, ttail: PArray;
begin
for i:=0 to sizeof(integer)*8-1 do begin
t:=A; t1:=nil;
atail:=nil; ttail:=nil;
while t <> nil do begin
t2:=t^.Next;
n:=(t^.Value shr i) and 1;
if n=0 then begin
if atail = nil then
A:=t^.Next
else atail^.Next:=t^.Next;
if ttail = nil then
t1:=t
else ttail^.Next:=t;
ttail:=t;
t^.Next:=nil;
end else atail:=t;
t:=t2;
end;
if atail <> nil then
atail^.Next:=t1
else A:=t1;
end;
end;
procedure Free (var A: PArray);
var t: PArray;
begin
while A <> nil do begin
t:=A^.Next;
Dispose (A);
A:=t;
end;
end;
var A: PArray;
begin
A:=nil;
Init(A);
Print(A);
Sort(A);
Print(A);
Free(A);
end.
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.044 c