Главная страница
    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.005 c
1-30760
Kordel
2002-05-30 17:01
2002.06.10
Редактирование текста в ячейках StringGrid а


14-30991
VID
2002-05-06 16:13
2002.06.10
Что с настройками Internet Explorer ???


3-30707
GenBr
2002-05-18 13:20
2002.06.10
Grid


8-30919
Basoil
2002-01-22 15:29
2002.06.10
повторно, склеивание WAV файлов


7-31014
VIB
2002-03-14 10:30
2002.06.10
CD ROM





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский