![]() |
Сортировка массивов
Ишется алгоритм для ручной сортировки массивов.
Что имеется: Код AS3:
Код AS3:
|
Объединить числа из первого массива с соответствующими объектами из второго в одном объекте { index: 12, value: 'a' }, и сортировать по полю index.
|
я бы добавил колбек в sort() первого массива и в нем бы сортировал второй... ну, скажем для коротких массивов это может быть не актуально, но для длинных - это ж нужно будет добавить целый массив фейк объектов которые нужны только для сортировки...
Код AS3:
EDIT: Ой не... так не получится... сейчас посмотрел, там пары в каком-то странном порядке передаются и массив сам во время сортировки не меняется... вобщем, сорри, тогда только совй сот писать :) |
Используйте любой стандартный алгоритм сортировки.
К примеру есть у вас QuickSort (Если не знаете, это такой быстрый алгоритм для сортировки (Сложность N*log N)) Взял на С++ что писал когда-то: Код:
Quick(int b, int e)То есть вызывать функцию надо так: Quick(0, a1.length-1); // Если взять ваш пример Но вам нужно, насколько я понимаю, чтобы сохранились относительные позиции другого массива. Что ж, надо просто элементы другого массива менять аналогично первому, получим что-то вроде этого: (Type - тип элементов в другом массиве) Код:
Quick(int b, int e) |
скачайте книгу "СТРУКТУРЫ ДАННЫХ И АЛГОРИТМЫ
Bell Laboratories Муррей-Хилл, Нью-Джерси ДЖОН Э. ХОПКРОФТ ТЧОЯЛЧС Корнеллский университет Итака, Нью-Йорк ДЖЕФФРИ Д. УЛЬМАН Станфордский университет Стамфорд, Калифорния Она в русском переводе. Страница 228 - есть 100 методов сортировки с готовым кодом Будет очень красиво :) |
жжете господа, человеку надо бумажку согнуть в двух местах, а вы ему планы космических кораблей даете.
|
Ну да, почему бы не реализовать вручную тот же пузырек? Просто двигать вместе с элементами а1 соответствующие элементы а2.
Код:
var a1:Array = [12, 3, 1, 2, 2]; |
Вот и я про тоже.. Только если элементов много, то он не прокатит..
|
Спасибо.
Пузырек вполне подходит и работает на ура. :) Только я вместо Код AS3:
Код AS3:
|
А чем плох Array.sortOn()? Или Vector.sort(myFunction)? В случае с вектором (FP 10 only) по идее будет даже быстрее, чем с Array... В обоих случаях имеется ввиду Object с полями index и value, как писал udaaff
|
В том, что если изначально есть 2 массива, то создавать третий - не тру путь :) Как бы перерасход памяти и т.п.
|
Ну а так перерасход других ресурсов будет =) Надо будет протестировать по времени. И, вообще, я имел в виду, изначально хранить эти данные в объектах, если это возможно конечно :)
|
Если изначально - то да, а если впоследствии, то, сами посудите, у вас было 2 массива, а вы только для сортировки создали лишний массив с N временных объектов, которые тут же выбросите после использования. Как бы ок, GC поработает + на их создание уйдет еще какое-то время... но это идеологически не подходит (если дано, что есть именно 2 массива, и никак нельзя, чтобы это был один) :)
|
Ну, в общем, согласен. Идеологически не катит :)
|
А есть возможность отсортировать только определенные объекты в массиве?
Код AS3:
|
| Часовой пояс GMT +4, время: 00:46. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.