Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как отсортировать числовой массив, чтобы сначала шли нечетные числа, а потом четные?

Сообщения:  [1-5] 

 
 автор: antf   (05.01.2012 в 15:36)   письмо автору
 
   для: cheops   (05.01.2012 в 15:26)
 

Alert после return поставил, а потом удивлялся почему не работает :) Пытаюсь понять как callback функция работает с массивом. Нашел описание алгоритма:

http://ru.wikipedia.org/wiki/Quicksort

  Ответить  
 
 автор: cheops   (05.01.2012 в 15:26)   письмо автору
 
   для: 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 назад вы спрашивали нужна ли математика в программировании? Вот тут нужна :))) Но из прикладников в реальности никто ей не пользуется, ставят счетчик и смотрят сколько получилось :)))

  Ответить  
 
 автор: antf   (05.01.2012 в 15:21)   письмо автору
 
   для: cheops   (05.01.2012 в 15:06)
 

А сколько раз будет вызвана функция?

  Ответить  
 
 автор: cheops   (05.01.2012 в 15:06)   письмо автору
 
   для: 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>

  Ответить  
 
 автор: antf   (05.01.2012 в 14:49)   письмо автору
 
 

Здравствуйте.
Пытаюсь разобраться как работает функция-параметр метода 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

  Ответить  

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования