Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Сортировка массива по количеству одинаковых элементов. (http://www.flasher.ru/forum/showthread.php?t=107047)

TeNoR 24.01.2008 19:57

Сортировка массива по количеству одинаковых элементов.
 
Здравствуйте, пожалуйста, помогите найти правильный подход к задаче:

Нужно найти число (букву/символ), которое меньше (больше) всего повторялось из всех перечисленных в массиве неограниченного длинной.

Например [7, 9, 7, 1, 9, 7, 5, 2, 5, 2, 7];

после сортировки (arr.sort()); - [1, 2, 2, 5, 5, 7, 7, 7, 7, 9, 9]

Число которое повторялось меньше всего раз - [1];
Больше всего - [7];

Пожалуйста, помогите найти рациональный способ решения сортировки массива по количеству одинаковых элементов. (не получается составить оптимальный алгоритм).
Заранее спасибо.

iNils 24.01.2008 23:56

Допустим есть массив: [1, 1, 2, 2, 3, 3]
И минимальных и макслимальных элементов будет по два. Что в таком случаи надо вернуть?

NoCD 25.01.2008 00:19

смотри вот этот образец, сам дня два парился, а на самом деле все просто
Код:

index=0
number=9

    for(i=0;i<number;i++)
{              _root["p"+i]=random(number)
                trace(_root["p"+i])}
  jj=0
  trace("........")
    for(j=0;j<number;j++)
{    for(k=0;k<number;k++)
{  if(index==_root["p"+k])
{              jj++
}}
                trace("Число "+index+"="+jj+" штуки")
                index++
                jj=0
}

надеюсь то, что требовалось

TeNoR 25.01.2008 16:29

iNils, сортировочное расположение n...n+k;

NoCD, спасибо большое, идея полностью подходящая.

Код:

index = 0;
number = 5;
var arr:Array=[];
var arr2:Array=[];
for (i=0; i<number; i++) {
        arr[i] = random(number);
        trace(arr[i]);
}
jj = 0;
trace("........");
for (j=0; j<number; j++) {
        for (k=0; k<number; k++) {
                if (index == arr[k]) {
                        jj++;
                }
        }
        arr2[j]=(jj+"-"+index);

        index++;
        jj = 0;
}
arr2.sort();
trace(arr2);

Ещё раз спасибо!


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

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