|
|
|
| Здравствуйте.
Пытаюсь разобраться как работает функция-параметр метода sort(). Поставил себе такую задачу: отсортировать массив так, чтобы сначала шли нечетные числа, а потом четные.
<script type='text/javascript'>
var a = [1,2,3,4,5,6];
//надо получить 1,3,5,2,4,6
a.sort(function(a, b) {
if(a % 2 != 0)
{
return -1;
}
else
{
return 1;
}
});
alert(a);
</script>
|
А получаю 1,3,5,6,4,2 | |
|
|
|
|
|
|
|
для: antf
(05.01.2012 в 14:49)
| | У вас в функции сравнения никак не задействован параметр b, а это неправильно, ведь когда оба числа четных или оба нечетных - нужно организовать сортировку по величине
<script type='text/javascript'>
var a = [1,2,3,4,5,6];
//надо получить 1,3,5,2,4,6
a.sort(function(a, b) {
if(a % 2 != 0)
{
// Нечетное
if(b % 2 != 0)
{
// Оба нечетных
if(a < b) return -1;
else if(a == b) return 0;
else return 1;
}
else
{
// a - нечетное, b - четное
return -1;
}
}
else
{
// Четное
if(b % 2 != 0)
{
// а - четное, b - нечетное
return 1;
}
else
{
// Оба четных
if(a < b) return -1;
else if(a == b) return 0;
else return 1;
}
}
});
alert(a);
</script>
|
| |
|
|
|
|
|
|
|
для: cheops
(05.01.2012 в 15:06)
| | А сколько раз будет вызвана функция? | |
|
|
|
|
|
|
|
для: antf
(05.01.2012 в 15:21)
| | Можно посчитать
<script type='text/javascript'>
var a = [1,2,3,4,5,6];
var count = 0;
//надо получить 1,3,5,2,4,6
a.sort(function(a, b) {
alert(++count);
if(a % 2 != 0)
{
// Нечетное
if(b % 2 != 0)
{
// Оба нечетных
if(a < b) return -1;
else if(a == b) return 0;
else return 1;
}
else
{
// a - нечетное, b - четное
return -1;
}
}
else
{
// Четное
if(b % 2 != 0)
{
// Нечетное - главне
return 1;
}
else
{
// Оба четных
if(a < b) return -1;
else if(a == b) return 0;
else return 1;
}
}
});
alert(a);
</script>
| У меня 11 раз насчитала, вообще это конечно нужно комбинаторикой считать, но лениво вспоминать и лезть за книгами по дискретной математике... Помните лет 6-7 назад вы спрашивали нужна ли математика в программировании? Вот тут нужна :))) Но из прикладников в реальности никто ей не пользуется, ставят счетчик и смотрят сколько получилось :))) | |
|
|
|
|
|
|
|
для: cheops
(05.01.2012 в 15:26)
| | Alert после return поставил, а потом удивлялся почему не работает :) Пытаюсь понять как callback функция работает с массивом. Нашел описание алгоритма:
http://ru.wikipedia.org/wiki/Quicksort | |
|
|
|