Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамический двунаправленный список (Рандом) [WinXP]


Sevenfold ©   (2011-05-11 03:13:00) 

Здраствуйте. Сразу к делу.

Типы данных для описания списка:

TData = Integer;
 (* Тип, описывающий элемент списка. *)
 TPElem = ^TElem;

 TElem = record
   Data: TData;
   PNext: TPElem;
   PPrev: TPElem;
 end;

 (* Тип, описывающий список. *)
 TList = record
   PFirst: TPElem;
   PLast: TPElem;
 end;


Процедура пузырчатой сортировки:

procedure SortBubbleDesc(const aList: TList);
var
 P1, P2, P: TPElem;
 Data: TData;
 F: Boolean;
begin
 if aList.PFirst = aList.PLast then
   Exit;

 P := aList.PLast;
 repeat
   F := False;

   P2 := aList.PFirst;
   repeat
     P1 := P2;
     P2 := P1^.PNext;
     if P1^.Data < P2^.Data then
     begin
       Data := P1^.Data;
       P1^.Data := P2^.Data;
       P2.Data := Data;
       F := True;
     end;
   until P2 = P;

   P := P^.PPrev;
 until not F;
end;


Задача:

Нужно сделать процедурку случайной перестановки элементов списка. Рассортировать кароче :p
Выручайте. Или хоть намекните как ато щас кирпичи полезут :o


Sevenfold   (2011-05-12 08:28:00) [1]

Удалено модератором
Примечание: Умники сюда не ходят, а прямо идут в помойку


icWasya   (2011-05-11 10:36:00) [2]

Покритикую.
Вся идея списков - что при вставке/удалении/перестановке элементов меняют не поле Data, а поля PNext/PPrev.
И если это учебное задание, то Вам скорее всего поставят незачёт за вышеприведённый код.
Поэтому, прежде чем браться за сортировку - Вам нужно написать процедуры добавления/удаления/перестановк элементов.


Dennis I. Komarov   (2011-05-11 09:29:00) [3]

Удалено модератором


MBo   (2011-05-11 07:38:00) [4]

N = длине списка
Пока N ненулевое, делать:
Встать в начало.
Перейти на Random(N) элемент.
Извлечь его и переставить в конец списка.
Уменьшить N.


Eraser   (2011-05-11 04:36:00) [5]

randomrange + f1


Наверх

Титульная страница Поиск, карта сайта Написать письмо