Вниз
Скачать: CL | DM;

Поразрядная сортировка списка слов   Найти похожие ветки 

← →
pavelkq   (2010-02-12 15:49) [0]

Прочитал замечательную статью про поразрядную сортировку http://www.delphimaster.ru/articles/dsort/index.html. Решил на базе этого алгоритма сделать функцию сортировки списка слов типа TStringList, где в качестве целого числа используется ASCII код символов. По прежнему опыту знаю, что обычно 4 символа хватает для качественной сортировки слов в алфавитном порядке. Итого, задача сводится к тому, чтобы 4 раза пройтись по всему списку слов, анализируя ASCII код символов от 4-го к первому. В уме все это кажется просто, а в реализации как-то не выходит.
Объявил тип:
type
 TPMySort=^TMySort; // указатель на тип TMySort
 TMySort = record
   my_word:string[20]; // само слово
   next: TPMySort; // следующий элемент списка
 end;
и объявил переменную
var
head: TPMySort; // начало (голова) списка
Далее пишу следующее:
function SortArray (InArr:TStringList):TStringList;
 var
 Bucket: Array[48..123] of TPMySort;// ASCII коды символов лежат в этом диапазоне
 i, j, k: integer;// i,j - для цикла; k - для наглядности
 ch: char;
 s: string;
begin
// перегон в список и сортировка
 For j:=4 downto 1 do //вроде бы надо сделать 4 цикла по всему списку
 begin
   For i:=0 to InArr.Count-1 do //цикл по всему списку слов
   begin
     s:=InArr[i]; //получаю i-е слово
     ch:=s[j]; //и j-й символ
     k:=ord(ch); // а так же код j-го символа

    //тут должно быть еще что-то

   end; //For i
 end; //For j

// перегон обратно в TStringList
 result:=TStringList.Create;
 For i:=48 to 123 do
 begin
   while Bucket[i].next <> NIL do
     begin
       s:="";// непонятно, как тут писать
       Result.Add(s);
     end; //while
 end; //For i

end;

Помогите, пожалуйста, закончить мысль, а так же оптимизировать код. Подозреваю, что можно не париться с какими-то самодельными списками, а использовать тот же самый массив из 4-х TStringList-ов.


← →
Anatoly Podgoretsky ©   (2010-02-12 16:09) [1]

TStringList сам в состоянии сортировать.


← →
Демо ©   (2010-02-12 17:00) [2]

Почитай здесь - http://forum.sources.ru/index.php?showtopic=293015&hl=



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.058 c
15-1268978113
oldman
2010-03-19 08:55
2010.08.27
Драйвер для Xerox Phaser 3117 под МЕ


15-1272520445
капо
2010-04-29 09:54
2010.08.27
Как прокачать sql экспириенс?


15-1270672202
Юрий
2010-04-08 00:30
2010.08.27
С днем рождения ! 8 апреля 2010 четверг


15-1273133655
Дмитрий С
2010-05-06 12:14
2010.08.27
Защита переменных окружения


2-1265912850
Делфиец
2010-02-11 21:27
2010.08.27
Сортировка в TADOQuery




   Наверх