|
про метод sort()
Доброго времени суток! В библии пользователя(Гудман) и подробном руководстве(носорог) по javascript действие метода sort() массива разъясняется так: берется две соседних ячейки и сравниваются. Но в таком масиве [4,5,6,3] каким образом тройка станет вперед, ведь она никак не является соседней для четверки? И еще при использовании аргумента-функции, результатом которой является 1,-1или 0 почему в подробном руководстве говорится, что данная функция запустится всего одлин раз, ведь она должна запускатся при каждом сравнении пар значений?
|
При сортировке используется алгоритм быстрой сортировки, при котором сравниваются не все пары чисел. Callback-функция будет вызвана не один раз.
|
А по подробнее про алгоритм?
А по подробнее про алгоритм?
|
|
Цитата:
V8: qsort с выбором опоры как среднего из трех и переходом на сортировку вставками для массивов размером меньше 10 (array.js:678). Spidernonkey: mergesort (jsarray.c:1962). JavaScriptCore: в коде есть такой комментарий: Цитата:
Как я понял, это сортировка выбором. Увы, но про Carakan и Charka ничего сказать не могу :-( |
Цитата:
Вот что сам Флэнэган пишет по этому поводу: "Для сортировки в какомлибо ином порядке, отличном от алфавитного, можно передать методу sort() в качестве аргумента функцию сравнения. Эта функция устанавливает, какой из двух ее аргументов должен присутствовать раньше в от сортированном списке. Если первый аргумент должен предшествовать второму, функция сравнения возвращает отрицательное число. Если первый аргумент в отсортированном массиве должен следовать за вторым, то функция возвращает число, большее нуля. А если два значения эквивалентны (т. е. порядок их рас положения не важен), функция сравнения возвращает 0." var a = [33, 4, 1111, 222]; a.sort(); // Алфавитный порядок: 1111, 222, 33, 4 a.sort(function(a,b) { // Числовой порядок: 4, 33, 222, 1111 return a-b; // Возвращает значение < 0, 0, или > 0 }); // в зависимости от порядка сортировки a и b Откуда тут вообще взялись a и b? Они же нигде явно не определялись. Понятно, что они как то берутся из массива, но как? |
Цитата:
то есть когда функция сортировки сранивает два элемента, чтобы определить какой из них должен идти раньше, она вызывает колбек |
Gvozd,
ух-ты! Первый раз вижу, чтоб вызывающая функция (sort) передавала (задавала) функции-аргументу (foo()) аргументы... Алгоритм конечно замысловатый... :blink: |
JSTalker,
у вас сильные пробелы в базовых знаниях function func1(funcname, funcparam){ funcname(funcparam); } func1(alert,'olo-lo'); |
JSTalker,
скобочки-то лишние уберите уже наконец. sort(foo); // а не sort(foo()) |
Часовой пояс GMT +3, время: 06:36. |
|