PDA

Просмотр полной версии : Сортировка списка



dr.Jekill
08.03.2009, 01:41
С клавиатуры вводятся слова и помещаются в D-список (info:string). Построить ещё один список, который содержит элементы исходного списка, расположенные по возрастанию.Вид списка может быть любой. Я делал на основе очереди. На второй части зациклился. Есть у кого какие идеи?

Naeel Maqsudov
08.03.2009, 11:46
Ранее (http://forum.developing.ru/showthread.php?t=16745) я уже показал, как производится вставка элемента на определенное место. Теперь создать новый список. А затем последовательно брать элементы из исходного и добавлять в новый, но предварительно вычислять местоположение.

Берем очередной элемент и его строку S.
Просматриваем новый список сначала, и бежим по нему до тех пор пока S < строки следующего элемента. После текущего элемента и надо произвести вставку.
Особое условия - это когда следующего элемента нет (добавление в конец) и когда S < строки первого элемента (добавление в начало)

dr.Jekill
10.03.2009, 13:23
Посмотрите, пожалуйста, эту процедуру.


procedure Sort_Spisok;
begin
D1:=head;
D1^.info:=D^.info;
repeat
while D<>nil do begin
if (D^.info > D1^.info) then D1^.info:=D^.info;
D:=D^.next;
end;
D1:=D1^.next;
until D1=nil;
end;

Naeel Maqsudov
10.03.2009, 13:37
Ну что ее смотреть? Опять глобальные переменные....
Для начала посмотрите, все ли там точно осталось после моей правки?
(Вы тэг закрыли неправильно.)

dr.Jekill
10.03.2009, 14:23
Вот немного подправил.


procedure Sort_Spisok(list:pitem);
var D1:pitem;
begin
D1:=head;
D1^.info:=list^.info;
repeat
while listnil do
begin
if (list^.info > D1^.info) then
D1^.info:=list^.info;
list:=list^.next;
end;
D1:=D1^.next;
until D1=nil;
end;

dr.Jekill
11.03.2009, 11:21
Разобрался. Naeel, cпаcибо.

Игорь Акопян
12.03.2009, 11:59
dr.Jekill, отредатировал ваш пост
убрал тэг, сформировал нужную структуру (вы же не думали что этот тэг сам отступы сформирует? - он только выводит код моноширинным шрифтом и не даёт движку начальные пробелы в строке резать)
далее выделил код и нажал кнопку - появился тэг с двух сторон выделения - пост сообщения - всё нормально

Игорь Акопян
12.03.2009, 12:00
ещё можно так:

procedure Sort_Spisok(list:pitem);
var D1:pitem;
begin
D1:=head;
D1^.info:=list^.info;
repeat
while listnil do
begin
if (list^.info > D1^.info) then
D1^.info:=list^.info;
list:=list^.next;
end;
D1:=D1^.next;
until D1=nil;
end;


для этого нужно вручную написать тэг ваш код

dr.Jekill
12.03.2009, 13:12
Переставил IE на FireFox все стало нормально функционировать.