[Logo]
LUA Форум
  [Search] Поиск   [Recent Topics] Последние темы   [Hottest Topics] Горячие темы   [Members]  Список участников   [Groups] На главную страницу 
[Register] Регистрация / 
[Login] Вход 
Проблема с сортировкой таблицы  XML
Индекс форума » LUA: Общие вопросы
Автор Сообщение
mozers™
Новичок

Зарегистрирован: 08/05/2008 16:18:54
Сообщений: 27
Оффлайн

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

Зарегистрирован: 15/04/2008 12:12:47
Сообщений: 106
От: Россия, Липецк
Оффлайн

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

Зарегистрирован: 08/05/2008 16:18:54
Сообщений: 27
Оффлайн

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

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 249
Оффлайн

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

Зарегистрирован: 08/02/2008 21:28:09
Сообщений: 230
От: СПб
Оффлайн


Это сообщение было редактировано 1 раз. Последнее обновление произошло в 07/10/2008 15:23:47


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

Зарегистрирован: 08/02/2008 21:28:09
Сообщений: 230
От: СПб
Оффлайн

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


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

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

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 249
Оффлайн

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

Зарегистрирован: 08/02/2008 21:28:09
Сообщений: 230
От: СПб
Оффлайн

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

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

Зарегистрирован: 08/05/2008 16:18:54
Сообщений: 27
Оффлайн

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

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

Зарегистрирован: 08/05/2008 16:18:54
Сообщений: 27
Оффлайн

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

Зарегистрирован: 08/05/2008 16:18:54
Сообщений: 27
Оффлайн

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

Зарегистрирован: 08/02/2008 21:28:09
Сообщений: 230
От: СПб
Оффлайн

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


Там QuickSort

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

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 249
Оффлайн

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

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

Зарегистрирован: 08/05/2008 16:18:54
Сообщений: 27
Оффлайн

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

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 249
Оффлайн

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

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

Это сообщение было редактировано 2 раз. Последнее обновление произошло в 07/10/2008 22:31:09

 
Индекс форума » LUA: Общие вопросы
Перейти:   
Powered by JForum 2.1.8 © JForum Team