Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.12.2010, 17:14
Кандидат Javascript-наук
Отправить личное сообщение для Иваннн Посмотреть профиль Найти все сообщения от Иваннн
 
Регистрация: 31.05.2010
Сообщений: 106

про метод sort()
Доброго времени суток! В библии пользователя(Гудман) и подробном руководстве(носорог) по javascript действие метода sort() массива разъясняется так: берется две соседних ячейки и сравниваются. Но в таком масиве [4,5,6,3] каким образом тройка станет вперед, ведь она никак не является соседней для четверки? И еще при использовании аргумента-функции, результатом которой является 1,-1или 0 почему в подробном руководстве говорится, что данная функция запустится всего одлин раз, ведь она должна запускатся при каждом сравнении пар значений?
Ответить с цитированием
  #2 (permalink)  
Старый 29.12.2010, 17:27
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

При сортировке используется алгоритм быстрой сортировки, при котором сравниваются не все пары чисел. Callback-функция будет вызвана не один раз.
Ответить с цитированием
  #3 (permalink)  
Старый 31.12.2010, 08:08
Кандидат Javascript-наук
Отправить личное сообщение для Иваннн Посмотреть профиль Найти все сообщения от Иваннн
 
Регистрация: 31.05.2010
Сообщений: 106

А по подробнее про алгоритм?
А по подробнее про алгоритм?
Ответить с цитированием
  #4 (permalink)  
Старый 31.12.2010, 08:24
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

http://ru.wikipedia.org/wiki/Quicksort
Ответить с цитированием
  #5 (permalink)  
Старый 31.12.2010, 13:55
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от Kolyaj
При сортировке используется алгоритм быстрой сортировки
Не везде.
V8: qsort с выбором опоры как среднего из трех и переходом на сортировку вставками для массивов размером меньше 10 (array.js:678).

Spidernonkey: mergesort (jsarray.c:1962).

JavaScriptCore: в коде есть такой комментарий:
Цитата:
// "Min" sort. Not the fastest, but definitely less code than heapsort
// or quicksort, and much less swapping than bubblesort/insertionsort.
(ArrayPrototype.cpp:506)
Как я понял, это сортировка выбором.

Увы, но про Carakan и Charka ничего сказать не могу :-(
Ответить с цитированием
  #6 (permalink)  
Старый 06.01.2011, 07:29
Аспирант
Отправить личное сообщение для JSTalker Посмотреть профиль Найти все сообщения от JSTalker
 
Регистрация: 29.06.2009
Сообщений: 92

Сообщение от Kolyaj Посмотреть сообщение
При сортировке используется алгоритм быстрой сортировки, при котором сравниваются не все пары чисел. Callback-функция будет вызвана не один раз.
Т.е. сам sort вызывает эту функцию много (сколько нужно) раз? А программисту достаточно указать один раз sort(foo())?

Вот что сам Флэнэган пишет по этому поводу:

"Для сортировки в какомлибо ином порядке, отличном от алфавитного, можно
передать методу 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? Они же нигде явно не определялись.
Понятно, что они как то берутся из массива, но как?
Ответить с цитированием
  #7 (permalink)  
Старый 06.01.2011, 09:12
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от JSTalker
Откуда тут вообще взялись a и b? Они же нигде явно не определялись.
Понятно, что они как то берутся из массива, но как?
они передаются функцией sort в callback
то есть когда функция сортировки сранивает два элемента, чтобы определить какой из них должен идти раньше, она вызывает колбек
Ответить с цитированием
  #8 (permalink)  
Старый 06.01.2011, 23:26
Аспирант
Отправить личное сообщение для JSTalker Посмотреть профиль Найти все сообщения от JSTalker
 
Регистрация: 29.06.2009
Сообщений: 92

Gvozd,
ух-ты!
Первый раз вижу, чтоб вызывающая функция (sort) передавала (задавала) функции-аргументу (foo()) аргументы...
Алгоритм конечно замысловатый...
Ответить с цитированием
  #9 (permalink)  
Старый 06.01.2011, 23:47
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

JSTalker,
у вас сильные пробелы в базовых знаниях

function func1(funcname, funcparam){
funcname(funcparam);
}
func1(alert,'olo-lo');
Ответить с цитированием
  #10 (permalink)  
Старый 06.01.2011, 23:51
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

JSTalker,
скобочки-то лишние уберите уже наконец.
sort(foo); // а не sort(foo())
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите про Метод attachEvent() sanhai Events/DOM/Window 4 19.05.2010 14:47
Как узнать у какого объекта вызван метод. Scalar Events/DOM/Window 4 26.03.2010 11:10
Что можно и нужно прочитать про валидацию? Amateur Общие вопросы Javascript 5 09.03.2010 11:41
Назначить на обработчик события метод обьекта Logo Общие вопросы Javascript 11 20.06.2009 23:40
Добавить свой метод к элементу alekciy Events/DOM/Window 6 16.02.2009 19:29