Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы (http://www.flasher.ru/forum/forumdisplay.php?f=10)
-   -   сортировка (http://www.flasher.ru/forum/showthread.php?t=51104)

uzzer 06.11.2003 22:25

сортировка
 
Подскажите алгоритм сортировки массива...
знаю нагло, но действительно надо срочно ...

uzzer 06.11.2003 22:29

юзал поиск array.sort не подойдёт ... если кому известно
есть методы bubble sort , qsort ... но я что-то ничего не понял ... точнее c C перевести что-то никак....интересует qsort

DUDE 06.11.2003 22:53

Array.sort
Доступность—Flash Player 5.
Синтаксис:
myArray.sort([compareFunction])
Параметры
compareFunction Произвольная сравнивающая функция, определяющая порядок сортировки. Учитывая аргументы А и В, функция orderfunc должна выполнять сортировку следующим образом:

-1 если A появляется прежде, чем B в сортируемой последовательности
0 если A = B
1 если A появляется после B в сортируемой последовательности

Возвращает
Ничего.
Описание:
Метод, сортирует массив на месте без создания копии. Если Вы опустите аргумент compareFunction, Flash сортирует элементы на месте, используя оператор сравнения <.

Пример:
Использование метода Array.sort без указания аргумента compareFunction:
var fruits = ["oranges", "apples", "strawberries", "pineapples", "cherries"];
trace(fruits.join()); // выведет в окно Output oranges,apples,strawberries,pineapples,cherries
fruits.sort();
trace(fruits.join()); // выведет apples,cherries,oranges,pineapples,strawberries

Использование Array.sort, определяя аргумент функции.
Код:


var passwords = [
  "gary:foo",
  "mike:bar",
  "john:snafu",
  "steve:yuck",
  "daniel:1234"
 ];
 function order (a, b) {
  // Элементы записаны в форме
  // name:password
  // Сортируем, используя в качестве ключа
  // только часть name.
  var name1 = a.split(':')[0];
  var name2 = b.split(':')[0];
  if (name1 < name2) {
    return -1;
  } else if (name1 > name2) {
    return 1;
  } else {
    return 0;
  }
 }
 for (var i=0; i< password.length; i++) {
  trace (passwords.join());
 }
 passwords.sort(order);
 trace ("Sorted:");
 for (var i=0; i< password.length; i++) {
  trace (passwords.join());
 }

Предыдущий код отобразит следующий результат в окне Output:

daniel:1234
gary:foo
john:snafu
mike:bar
steve:yuck

DUDE 06.11.2003 22:56

Array.sortOn

Доступность:
Flash Player 6.

Синтаксис:
Array.sortOn(fieldName)

Параметры:
fieldName - это строка (String), которая идентифицирует область в элементе массива для сортировки.

Возвращает:
Ничего.

Описание:
Метод, сортирует однотипные элементы в массиве. Если параметр fieldName не задан, функция не работает. Если задано несколько параметров fieldName, первое значение преобразовывается в строку (String), а остальные параметры игнорируются.
Если ни один из сравниваемых элементов не содержит область, указанную в fieldName, сортировка происходит также, как и в методе Array.sort.
Пример:
Этот пример создает новый массив и сортирует его в алфавитном порядке по city:

var recArray = new Array();
recArray.push( { name: "bob", city: "omaha", zip: 68144 } );
recArray.push( { name: "greg", city: "kansas city", zip: 72345 } );
recArray.push( { name: "chris", city: "burlingame", zip: 94010 } );
recArray.sortOn("city");
// результат будет следующим:
recArray[0] = name: "chris", city: "burlingame", zip: 94010
recArray[1] = name: "greg", city: "kansas city", zip: 72345
recArray[2] = name: "bob", city: "omaha", zip: 68144

uzzer 07.11.2003 00:23

я конечно хотел использовать алгоритм quick sort как в си... но раз такой исчерпывающий ответ... спасибо.

Думаю этого хватит...

хотя если кто выложит сюда алгоритм quick sort буду рад.

Suhoff 07.11.2003 02:37

Код:

//QuickSort
function sort_hoor (a, left, right) {
        var i = left;
        var j = right;
        var step = -1;
        var condition = 1;
        if (left>=right) {
                return;
        };
        do {
                if (condition == (a[i]<a[j])) {
                        foo = a[j];a[j] = a[i]; a[i] = foo;
                        foo = j;j = i;i = foo;

                        step *= -1;
                        condition = !condition;
                };
                j += step;
        } while (j != i);
        sort_hoor(a, left, i-1);
        sort_hoor(a, i+1, right);
};

a - сортируемый массив;
left - минимальный сортируемый индекс массива (обычно = 0);
right - максимальный сортируемый индекс массива (обычно = a.length-1);

Удачи.

Nickoledion 15.01.2004 19:56

Цитата:

Оригинал написал(а) DUDE
[b]Array.sortOn

Доступность:
Flash Player 6.

Синтаксис:
Array.sortOn(fieldName)

Параметры:
fieldName - это строка (String), которая идентифицирует область в элементе массива для сортировки.

...

Правда ведь, что этот метод иногда глючит? (как правило первый элемент становится последним) Или этот косяк только у меня?

nuran 16.01.2004 08:50

http://algolist.manual.ru/sort/index.php


Часовой пояс GMT +4, время: 23:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.