![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамический двунаправленный список (Рандом) [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