Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   про метод sort() (https://javascript.ru/forum/dom-window/14102-pro-metod-sort.html)

Раед 25.03.2012 11:03

Цитата:

Сообщение от Rootpassword
НО ЗАЧЕМ?

Как зачем? В массиве есть несколько элементов, иногда они из него удаляются, и я хочу, чтобы при удалении все остальные элементы сдвигались. Сделал так:
var arr=[5,8,7,65,64,842,8,42,8,41,6,8,777];
alert(arr.length);
delete arr[4];
delete arr[6];
delete arr[1];
arr = arr.sort(function(a,b){return (b==undefined ? -1 : 0)});
alert(arr.length);
var x = arr.length;
while (arr[--x]==undefined) arr.pop();
alert(arr.length);

Rootpassword 25.03.2012 11:14

Раед, значения undefined в твою функцию сортировки даже не будут переданы, ибо сортируются всегда отдельно.
Во вторых, прямой обход массива -это порядок n. Сравни с сортировкой, которая O(n log n), хотя тут вообще порядок будет n, так как ничего по сути не сортируется + вызовы функции.
Это что? Оптимизация?

Kolyaj 25.03.2012 11:22

Цитата:

Сообщение от Раед
В массиве есть несколько элементов, иногда они из него удаляются, и я хочу, чтобы при удалении все остальные элементы сдвигались.

http://alljs.ru/articles/array/manipulations#splice

antonM 25.03.2012 20:02

Цитата:

Сообщение от Иваннн
почему у массива нельзя найти медиану(я понимаю середину массива) у любого массива (объект.constructor==Array) есть свойвство length

Медиана != Середина массива.
Медиана = середина распределения частот. Лучше всего подходит для характеристики расположения центра распределения для интервальной или относительной шкалы.
Хороший график для понимания:

или


На сколько адекватна будет медиана для такого массива?: [15, "d", 1, "a", 4, "b"]. Кстати стандартный метод, числовую часть сортирует неправильно -> 1,15,4,a,b,d

Раед 25.03.2012 20:40

Цитата:

Сообщение от Rootpassword
прямой обход массива -это порядок n. Сравни с сортировкой, которая O(n log n), хотя тут вообще порядок будет n, так как ничего по сути не сортируется + вызовы функции.

Из этих слов не понял ровным счётом ничего :-?

Раед 25.03.2012 20:42

Цитата:

Сообщение от Rootpassword
ибо сортируются всегда отдельно.

это как, а почему же тогда всё работает?

Rootpassword 25.03.2012 20:57

Цитата:

Сообщение от Раед
это как, а почему же тогда всё работает?

Твоя функция сортировки всегда возвращает 0, т.е. эквивалентность для сортировки, поскольку в function(a,b){return (b==undefined ? -1 : 0)}
undefined сюда не передаются никогда-так уж сортировка устроена в js(да и не только в js, кстати).
Поскольку она утверждает, что все неважно, функция вызывается ровно n-1 раз.

Раед 28.03.2012 12:23

Rootpassword,
Цитата:

Сообщение от Rootpassword
ровно n-1 раз.

Во первых, что такое n
Во вторых, то что undefined в ф-ию не попадают, это я уже понял. Но почему же они оказываются в конце массива?

Rootpassword 28.03.2012 12:49

n, N-всегда количество данных.

Потому что сортируются отдельно, без функции, и записываются в конец. Все !undefined сортируются функцией, и потом все undefined просто добавляются в конец массива.

Раед 31.03.2012 00:58

Цитата:

Сообщение от Rootpassword
потом все undefined просто добавляются в конец массива

То есть можно просто:
arr.sort()


Часовой пояс GMT +3, время: 10:26.