Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
NDim
Зарегистрирован: 11.01.2002 Сообщения: 44 Откуда: Екатеринбург
|
Добавлено: Вт Окт 12 2004 11:41 Заголовок сообщения: Неочевидный метод сортировки ... |
|
|
Как осуществить сортировку по трем и более полям одновременно ?
Так же как в SQL например [...order by a,b,c].
Подскажите хотя бы сам принцип ... |
|
Вернуться к началу |
|
|
Витал
Зарегистрирован: 09.08.2004 Сообщения: 73
|
Добавлено: Ср Окт 13 2004 03:51 Заголовок сообщения: |
|
|
а что сортировать то собираешься |
|
Вернуться к началу |
|
|
NDim
Зарегистрирован: 11.01.2002 Сообщения: 44 Откуда: Екатеринбург
|
Добавлено: Ср Окт 13 2004 05:53 Заголовок сообщения: Неочевидный метод сортировки ... |
|
|
Разве это важно ?
Не базу данных и использование баз нежелательно. |
|
Вернуться к началу |
|
|
Витал
Зарегистрирован: 09.08.2004 Сообщения: 73
|
Добавлено: Ср Окт 13 2004 09:20 Заголовок сообщения: |
|
|
Ну,задачка интерессная,я бы подумал,но представить себе не могу структуру.Просто начинай сортировать по последнему признаку,потом сортируй по второму(сортировка по третьему сохраниться),позже переходи на первый(второй и третий не должны слететь).Правда все это должно работать при каком-нубудь пузырьковом методе а так на деле не знаюкак будет.
Хм,пытался тут примерчик сообразить,объемно вытекает,пробуй обходить наборы с начала и вставлять в конец аналогичных(т.е. вставляй значение в конце таких же,а не в начале),попробуй. |
|
Вернуться к началу |
|
|
Alexandr 172
Зарегистрирован: 03.09.2004 Сообщения: 66 Откуда: Челябинск
|
Добавлено: Ср Окт 13 2004 09:52 Заголовок сообщения: |
|
|
Лучше использовать с помощью этих трех полей сделать какое-нибудь выражение и уже его сортировать обычным способом.
Например, три поля (F1, F2, F3), каждое состоит из одинакового кол-ва символов, тогда, сортировать можно по
F1.F2.F3 (просто конкатенация)
здесь в первую очередь отсортируется по F1, потом по F2, и в конце по F3. _________________ www.pay-ace.com/Ras254 - всем в подарок $150 |
|
Вернуться к началу |
|
|
Andy-C
Зарегистрирован: 09.12.2003 Сообщения: 73 Откуда: Нальчик
|
Добавлено: Чт Окт 14 2004 11:26 Заголовок сообщения: |
|
|
Определить операцию отношения: (f1,f2,f3)>(f1`,f2`,f3`)
И при помощи неё определить порядок следования кортежей. _________________ До onlina Andrew C. |
|
Вернуться к началу |
|
|
NDim
Зарегистрирован: 11.01.2002 Сообщения: 44 Откуда: Екатеринбург
|
Добавлено: Пт Окт 15 2004 06:55 Заголовок сообщения: Неочевидный метод сортировки ... |
|
|
Нашел способ !
Путем организации комплексного индекса особым образом. |
|
Вернуться к началу |
|
|
Malcolm
Зарегистрирован: 12.06.2004 Сообщения: 187 Откуда: Хабаровск
|
Добавлено: Пт Окт 15 2004 23:10 Заголовок сообщения: |
|
|
Я тут знаете ли в институте учусь, так там нам такую задачку давали. Все поголовно делали тремя подряд идущими пузырьковыми сортировками , я же додумался использовать метод предложенный здесь Andy-C реализованный с помощью предложения Alexandr 172 . Плюсы - что можно использовать при любом методе сортировки, в т.ч. и методом быстрой сортировки (я так и делал) |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Пн Окт 18 2004 09:08 Заголовок сообщения: |
|
|
Что вы тут все мудрите ? Например, для быстрой сортировки - в функции сравнения надо просто учитывать, что полей для сравнения 3, на не 1, если значения в первом поле совпадают, то сравнивается 2-е поле, и т.д. |
|
Вернуться к началу |
|
|
Malcolm
Зарегистрирован: 12.06.2004 Сообщения: 187 Откуда: Хабаровск
|
Добавлено: Пн Окт 18 2004 19:10 Заголовок сообщения: |
|
|
Нет, это вы мудрите - Зачем писать все эти условия, если можно сравнивать одним условием? гораздо меньше кода, и не намного медленней
Цитата: |
сортировать можно по
F1.F2.F3 (просто конкатенация)
|
|
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вт Окт 19 2004 06:25 Заголовок сообщения: |
|
|
Хе-хе, а если это не строковые поля ? |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вт Окт 19 2004 06:30 Заголовок сообщения: |
|
|
Да и работать будет быстрее. В случае с конкатенацией будет обязательно 2 операции - собственно конкатенация и сравнение, а в моем варианте - операций как минимум 1, как максимум 3, в зависимости от сравниваемой иформации. К тому же конкатенация разбивается еще на кучу операций, как то: выделение памяти под новую строку, копирование всех трех старых строк в новую. На хрена это ? |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вт Окт 19 2004 06:33 Заголовок сообщения: |
|
|
Кстати, если вдуматься, то Andy-C предлагал такой же вариант ) |
|
Вернуться к началу |
|
|
Alexandr 172
Зарегистрирован: 03.09.2004 Сообщения: 66 Откуда: Челябинск
|
Добавлено: Вт Окт 19 2004 08:05 Заголовок сообщения: |
|
|
2 Mike: А вот как ты в SQL условие запихнешь поочередное сравнение по полям, очень интересно? Что то я не могу себе такого представить. _________________ www.pay-ace.com/Ras254 - всем в подарок $150 |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вт Окт 19 2004 08:07 Заголовок сообщения: Re: Неочевидный метод сортировки ... |
|
|
NDim писал(а): | ... использование баз нежелательно. |
А в SQL запросе я напишу ORDER BY ..... |
|
Вернуться к началу |
|
|
Alexandr 172
Зарегистрирован: 03.09.2004 Сообщения: 66 Откуда: Челябинск
|
Добавлено: Вт Окт 19 2004 09:39 Заголовок сообщения: |
|
|
Вот, надо же совсем уже забыл о чем речь идет... действительно нужно не для SQL _________________ www.pay-ace.com/Ras254 - всем в подарок $150 |
|
Вернуться к началу |
|
|
Malcolm
Зарегистрирован: 12.06.2004 Сообщения: 187 Откуда: Хабаровск
|
Добавлено: Вт Окт 19 2004 18:32 Заголовок сообщения: |
|
|
Mike писал(а): | Хе-хе, а если это не строковые поля ? |
Если числа не большие ~2байт, то shl (еще быстрей работать будет) а если большие или не все числа, то тут уж никак.. |
|
Вернуться к началу |
|
|
|