Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];

Вниз

Сортировка по алфавиту   Найти похожие ветки 

 
Random   (2002-05-30 20:35) [0]

Имеется список вида
TElem = record
inf:string[30];
prev,next:PElem;
end;
Как упорядочить его по алфавиту элементов inf ?


 
ggrisha   (2002-05-30 20:54) [1]

Ну например:
Способ 1 Загнать строки или ссылки на них в массив и отсортировать любым из способов. Потом сделать из массива список.
Способ 2 Находим элемент с наименьшим inf записываем в начало нового списка и удаляем из старого, далее процесс повторяется.


 
Random   (2002-05-30 21:26) [2]

Не, нужен третий способ. Сравнить - поменять местами. Как в сортировке массива. Кто знает - помогите!


 
Anatoly Podgoretsky   (2002-05-30 21:57) [3]

Random (30.05.02 20:35)
Живи проще, загони в StringList и позволь ему отсортировать


 
Random   (2002-05-30 22:13) [4]

2Anatoly: я бы с радостью, но нужно именно так. Важен сам алгоритм сортировки списка :( Помогите, а? Вот скажем такой код:
Repeat
changed:=false;
if x.next <> nil then begin
If x.inf > x.next.inf
then begin
buf:=x.next.inf;
x.next.inf:=x.inf;
x.inf:=buf;
changed:= true;
end;
Sort(x.next,changed);
end;
Until not changed;
Работать не хочет. Что в нем изменить, чтобы заработало?


 
Anatoly Podgoretsky   (2002-05-30 22:21) [5]

Тогда TList в нем есть метод Sort, иначе сам пиши сортировку, у Кнута этому посвящен целый том, свыше тысячи страниц


 
KilkennyCat   (2002-05-31 01:48) [6]

Твой алгоритм выполняется, пока переменная changed не станет фалзе. Похоже, у нее есть риск никогда такою не стать, после первого присваивания true, если в Sort не вернется false. А как только вернется, так и цикл закончится.


 
MBo   (2002-05-31 07:20) [7]

в данном случае не нужно менять местами сами элементы

var Head:PItem;

implementation

{$R *.DFM}

procedure DispList;
var Temp,Item:PItem;
begin
if Head=nil then Exit;
Item:=Head^.next;
repeat
Temp:=Item^.Next;
Dispose(Item);
Item:=Temp;
until Item=nil;
Dispose(Head);
Head:=nil;
end;

//заполнение
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
item,Temp:PItem;
begin
Randomize;
if Head<>nil then DispList;
new(Head);
Temp:=Head;
for i:=1 to 10 do begin
new(Item);
Item^.Data:=Chr(65+Random(26))+Chr(65+Random(26));
Item^.Prev:=Temp;
Temp^.Next:=Item;
Temp:=Item;
end;
end;
//контроль
procedure TForm1.Button2Click(Sender: TObject);
var Item:PItem;
begin
if Head=nil then Exit;
Memo1.Clear;
Item:=Head;
while Item^.Next<> nil do begin
Item:=Item^.Next;
Memo1.Lines.Add(Item^.Data);
end;
end;


//bubble sort
procedure TForm1.Button3Click(Sender: TObject);
var Item,First:PItem;
s:string;
begin
if (Head=nil) or (Head^.Next=nil) then Exit;
First:=Head^.Next;
while First^.Next<>Nil do begin
Item:=First^.Next;
repeat
if Item^.Data<First^.Data then begin
s:=First^.Data;
First^.Data:=Item^.Data;
Item^.Data:=s;
end;
Item:=Item^.Next;
until Item=nil;
First:=First^.Next;
end;
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
DispList;
end;


 
nejest   (2002-05-31 08:47) [8]

Я сам пробовал делать сортировку в ручную, оно работает только с латинскими символами, так что используй лутше метод Sort из StringList и не изобретай велосипед.


 
esVer   (2002-05-31 09:07) [9]

To:nejes
метод Sort из StringList зависит от локали, попробуйте отсортировать русский текст в английской Windows :)

Логичнее всего использовать TList + свой метод Compare.
Проблема не стоит того шума, что здесь наблюдается :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
1-30828
Флип
2002-05-29 00:12
2002.06.10
Подскажите начинающему............


1-30784
Tahion
2002-05-24 21:43
2002.06.10
Народ, подскажите УРЛ, где подробно можно прочитать про Drawgrid.


1-30756
Voldemar
2002-05-30 14:59
2002.06.10
Не создается MDIchild форма


4-31057
Rail
2002-04-06 11:18
2002.06.10
Как подключить отключить сетевой диск без диалога Windows


7-31015
VBill
2002-03-14 00:58
2002.06.10
Дискета в дисководе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский