25.03.2012, 11:03
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
Сообщение от 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);
|
|
25.03.2012, 11:14
|
Server
|
|
Регистрация: 26.09.2011
Сообщений: 252
|
|
Раед, значения undefined в твою функцию сортировки даже не будут переданы, ибо сортируются всегда отдельно.
Во вторых, прямой обход массива -это порядок n. Сравни с сортировкой, которая O(n log n), хотя тут вообще порядок будет n, так как ничего по сути не сортируется + вызовы функции.
Это что? Оптимизация?
Последний раз редактировалось Rootpassword, 25.03.2012 в 11:17.
|
|
25.03.2012, 11:22
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Раед
|
В массиве есть несколько элементов, иногда они из него удаляются, и я хочу, чтобы при удалении все остальные элементы сдвигались.
|
http://alljs.ru/articles/array/manipulations#splice
|
|
25.03.2012, 20:02
|
|
Кандидат Javascript-наук
|
|
Регистрация: 11.08.2011
Сообщений: 103
|
|
Сообщение от Иваннн
|
почему у массива нельзя найти медиану(я понимаю середину массива) у любого массива (объект.constructor==Array) есть свойвство length
|
Медиана != Середина массива.
Медиана = середина распределения частот. Лучше всего подходит для характеристики расположения центра распределения для интервальной или относительной шкалы.
Хороший график для понимания:
или
На сколько адекватна будет медиана для такого массива?: [15, "d", 1, "a", 4, "b"]. Кстати стандартный метод, числовую часть сортирует неправильно -> 1,15,4,a,b,d
Последний раз редактировалось antonM, 25.03.2012 в 20:05.
|
|
25.03.2012, 20:40
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
Сообщение от Rootpassword
|
прямой обход массива -это порядок n. Сравни с сортировкой, которая O(n log n), хотя тут вообще порядок будет n, так как ничего по сути не сортируется + вызовы функции.
|
Из этих слов не понял ровным счётом ничего
|
|
25.03.2012, 20:42
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
Сообщение от Rootpassword
|
ибо сортируются всегда отдельно.
|
это как, а почему же тогда всё работает?
|
|
25.03.2012, 20:57
|
Server
|
|
Регистрация: 26.09.2011
Сообщений: 252
|
|
Сообщение от Раед
|
это как, а почему же тогда всё работает?
|
Твоя функция сортировки всегда возвращает 0, т.е. эквивалентность для сортировки, поскольку в function(a,b){return (b==undefined ? -1 : 0)}
undefined сюда не передаются никогда-так уж сортировка устроена в js(да и не только в js, кстати).
Поскольку она утверждает, что все неважно, функция вызывается ровно n-1 раз.
|
|
28.03.2012, 12:23
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
Rootpassword,
Сообщение от Rootpassword
|
ровно n-1 раз.
|
Во первых, что такое n
Во вторых, то что undefined в ф-ию не попадают, это я уже понял. Но почему же они оказываются в конце массива?
|
|
28.03.2012, 12:49
|
Server
|
|
Регистрация: 26.09.2011
Сообщений: 252
|
|
n, N-всегда количество данных.
Потому что сортируются отдельно, без функции, и записываются в конец. Все !undefined сортируются функцией, и потом все undefined просто добавляются в конец массива.
|
|
31.03.2012, 00:58
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
Сообщение от Rootpassword
|
потом все undefined просто добавляются в конец массива
|
То есть можно просто:
arr.sort()
|
|
|
|