[Logo] LUA Форум
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Проблема с сортировкой таблицы  XML
Forum Index » LUA: Общие вопросы
Author Message
mozers™
Новичок

Joined: 08/05/2008 16:18:54
Messages: 27
Offline

Никак не могу понять почему таблица не сортируется как надо.
Делаю так:Получается совсем не то, что надо получить:
XNut
ГУРУ
[Avatar]

Joined: 15/04/2008 12:12:47
Messages: 132
Location: Россия, Липецк
Offline

здесь нужен или составной ключ, например, или два прохода сортировки
mozers™
Новичок

Joined: 08/05/2008 16:18:54
Messages: 27
Offline

Составной ключ мне не подходит (слишком непредсказуема разрядность чисел - тут сильно упрощенный пример).
В два прохода тоже почему то фигню выдает
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

Вы забыли написать, а что же вы хотите получить.
Strijar
ГУРУ

Joined: 08/02/2008 21:28:09
Messages: 259
Location: СПб
Offline


This message was edited 1 time. Last update was at 07/10/2008 15:23:47


Лучше быть белым волком, чем серым человеком.
[WWW]
Strijar
ГУРУ

Joined: 08/02/2008 21:28:09
Messages: 259
Location: СПб
Offline

smz wrote:Вы забыли написать, а что же вы хотите получить.


Табличка после кода - желаемое. Я тоже не сразу понял

Лучше быть белым волком, чем серым человеком.
[WWW]
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

А, до меня дошло. (Исходное сообщение было несколько двусмысленно, однако). Можно так:
Strijar
ГУРУ

Joined: 08/02/2008 21:28:09
Messages: 259
Location: СПб
Offline

О, точно - красота!

Лучше быть белым волком, чем серым человеком.
[WWW]
mozers™
Новичок

Joined: 08/05/2008 16:18:54
Messages: 27
Offline

2smz
Я написал как раз не то что получаю, а то что хочу получить

2Strijar
СПАСИБО! То что надо. Работает отлично!
mozers™
Новичок

Joined: 08/05/2008 16:18:54
Messages: 27
Offline

2smz
Класс!
[s]Ребята, я не успеваю за стремительным полетом вашей мысли [/s]
mozers™
Новичок

Joined: 08/05/2008 16:18:54
Messages: 27
Offline

Всетаки никак не просеку логику функции сравнения :-/
Вот так, как я полагал, вообще ничего не должно сортироваться:
Однако - элементы таблицы все равно сортируются, правда в каком то диком порядке :-/
Если false заменить на true то вообще ошибка возникает.
10 раз справку по sort перечитал - бесполезно :-/
Strijar
ГУРУ

Joined: 08/02/2008 21:28:09
Messages: 259
Location: СПб
Offline

mozers™ wrote:Всетаки никак не просеку логику функции сравнения :-/


Там QuickSort

Лучше быть белым волком, чем серым человеком.
[WWW]
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

mozers™ wrote:Всетаки никак не просеку логику функции сравнения :-/
Вот так, как я полагал, вообще ничего не должно сортироваться:
Однако - элементы таблицы все равно сортируются, правда в каком то диком порядке :-/
Если false заменить на true то вообще ошибка возникает.
10 раз справку по sort перечитал - бесполезно :-/

Отвлекаясь от конкретного алгоритма сортировки, принцип такой - функция сравнения должна отвечать на вопрос: "1-й элемент должен быть впереди 2-го?". Ф-ция сравнения, всегда возвращающая false - корректна (например, все элементы таблицы по её логике равны - демократия), а вот ф-ция, всегда возвращающая true - некорректна, так как она один раз требует поставить A впереди Б, а второй раз - наоборот.
mozers™
Новичок

Joined: 08/05/2008 16:18:54
Messages: 27
Offline

СПАСИБО. Все вроде понял.
Если понял правильно, то работу функции sort можно описать таким кодом:
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

Вы применили так наз. пузырьковую сортировку. Обычно она реализуется двойным вложенным циклом, ваш вариант в наихудшем случае будет раза в 2 медленнее (хотя в наилучшем будет гораздо быстрее).

Функция comp должна быть вынесена из ф-ции SortTable и передаваться как параметр. Кроме того, её можно упростить:
Менять элементы местами в Lua можно без временных переменных:

This message was edited 2 times. Last update was at 07/10/2008 22:31:09

 
Forum Index » LUA: Общие вопросы
Go to:   
Powered by JForum 2.1.9 © JForum Team