Страница 1 из 1

Сортировка списка

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

Re: Сортировка списка

Добавлено: 08 мар 2009, 11:46
Naeel Maqsudov
Ранее я уже показал, как производится вставка элемента на определенное место. Теперь создать новый список. А затем последовательно брать элементы из исходного и добавлять в новый, но предварительно вычислять местоположение.

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

Re: Сортировка списка

Добавлено: 10 мар 2009, 13:23
dr.Jekill
Посмотрите, пожалуйста, эту процедуру.

Код: Выделить всё

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;

Re: Сортировка списка

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

Re: Сортировка списка

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

Код: Выделить всё

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;

Re: Сортировка списка

Добавлено: 11 мар 2009, 11:21
dr.Jekill
Разобрался. Naeel, cпаcибо.

Re: Сортировка списка

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

Re: Сортировка списка

Добавлено: 12 мар 2009, 12:00
Игорь Акопян
ещё можно так:
[syntax=pascal]
procedure Sort_Spisok(list :p item);
var D1 :p item;
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;
[/syntax]

для этого нужно вручную написать тэг [noparse][syntax=pascal] ваш код [/syntax] [/noparse]

Не работали тэги

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