Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Снова 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.031 c
2-1133001837
IAMDANIL
2005-11-26 13:43
2005.12.11
Почему не работает проверялка?


14-1131899671
default
2005-11-13 19:34
2005.12.11
Задачка


14-1132567081
futility
2005-11-21 12:58
2005.12.11
Delphi


4-1128520529
Profik
2005-10-05 17:55
2005.12.11
MailSlot


9-1121556269
Conferno
2005-07-17 03:24
2005.12.11
GL Blur (GLScene)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский