|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Динамический двунаправленный список (Рандом)
Здраствуйте. Сразу к делу.
Типы данных для описания списка: Код:
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; Задача: Нужно сделать процедурку случайной перестановки элементов списка. Рассортировать кароче Выручайте. Или хоть намекните как ато щас кирпичи полезут |
#2
|
||||
|
||||
Случайной перестановки? да просто.
Код:
a:=random(N);// N - количество элементов b:=random(N); while b=a do b:=random(N); // чтобы никогда не было a=b Делаем этот код столько раз, сколько хочется. jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
|||
|
|||
А если б будет ровняться а с первого захода? Так дело не пойдёт.
|
#4
|
|||
|
|||
Спасибо за помощь. Я уже нашол решение.
|
#5
|
||||
|
||||
Sevenfold,
если B=A с самого начала, то пойдет цикл While b=a. Если b<>a - то эти значения A и B нас устраивают и цикл игнорируется. jmp $ ; Happy End! The Cake Is A Lie. |