Forum Webscript.Ru

Программирование => Perl => Тема начата: AliMamed от 29 Марта 2001, 18:59:39

Название: рассортировка массива
Отправлено: AliMamed от 29 Марта 2001, 18:59:39
поделитесь кто как реализовывает сабдж.

мне известен только вариант составление нового(рассортированного) массива сбором рэндом из сортированного.
а нельзя как-то проще это сделать?
Название: рассортировка массива
Отправлено: Chs от 29 Марта 2001, 22:32:04
Достаточно случайным образом поменять местами несколько элементов.
Название: рассортировка массива
Отправлено: AliMamed от 30 Марта 2001, 10:21:41
ну в общем в моем случае это и делается - только не "местами", а все элементы массива =)
вопрос то вот наверное как надо было сформулировать. есть ли в перле аналог функции shuffle, которая есть в РНР?
Название: рассортировка массива
Отправлено: Chs от 30 Марта 2001, 11:31:44
Цитировать
AliMamed (30-03-2001 10:21):
вопрос то вот наверное как надо было сформулировать. есть ли в перле аналог функции shuffle, которая есть в РНР?
А что она в PHP делает?
Название: рассортировка массива
Отправлено: AliMamed от 30 Марта 2001, 11:33:58
меняет порядок элементов массива в произвольном порядке
Название: рассортировка массива
Отправлено: Chs от 30 Марта 2001, 15:10:26
Цитировать
AliMamed (30-03-2001 11:33):
меняет порядок элементов массива в произвольном порядке
такой нет, IMHO.
Название: рассортировка массива
Отправлено: от 30 Марта 2001, 17:01:29
Цитировать
AliMamed (30-03-2001 11:33):
меняет порядок элементов массива в произвольном порядке

perldoc -q shuffle
Название: рассортировка массива
Отправлено: от 30 Марта 2001, 17:12:30
Точно. :)

     Use this:

         # fisher_yates_shuffle( \\@array ) :
         # generate a random permutation of @array in place
         sub fisher_yates_shuffle {
             my $array = shift;
             my $i;
             for ($i = @$array; --$i; ) {
                 my $j = int rand ($i+1);
                 next if $i == $j;
                 @$array[$i,$j] = @$array[$j,$i];
             }
         }

         fisher_yates_shuffle( \\@array );    # permutes @array in place

     You\'ve probably seen shuffling algorithms that work using
     splice, randomly picking another element to swap the current
     element with:

         srand;
         @new = ();
         @old = 1 .. 10;  # just a demo
         while (@old) {
             push(@new, splice(@old, rand @old, 1));
         }

     This is bad because splice is already O(N), and since you do it
     N times, you just invented a quadratic algorithm; that is,
     O(N**2). This does not scale, although Perl is so efficient that
     you probably won\'t notice this until you have rather largish
     arrays.
Название: рассортировка массива
Отправлено: AliMamed от 30 Марта 2001, 17:19:39
Цитировать
NAS (30-03-2001 17:12):
Точно. :)
что точно-то?

у меня тута ни шелла ни перлдока нету, но если енто его ответ, то значит не фига такой функции нету, потому что так как в первом примере показано так (ну почти так=)) я и делаю
Название: рассортировка массива
Отправлено: от 30 Марта 2001, 18:01:27
А у меня тут тоже шела нет :)
Есть Перл от Activstate, а там встроенный perldoc.