Нужно сортировать массив в порядку убывания
При этом числа равные X считались меньше остальных даже если в массиве есть числа<X
Исходный массив
qw(1 2 5 9 20 20 1 3 6 2);
При X==20 нужно получит такой результат
20 20 1 1 2 2 3 5 6 9
Ищется решение на Perl
PS на самом деле массивы имеют примерно такой вид
for(my $i=1; $i<1000; $i++) {
push @array, (1..25);
}
![Фотография](https://vse.kz/public/style_images/osnovnoi34/profile/default_large.png)
Perl sort
Автор image, 14.12.2002, 02:26
#2
Отправлено 14.12.2002, 19:31:58
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Ну если тупо то так:
З.Ы.
Есть более специальные форумы на которых ЕСТЬ умные люди, готовые помочь, здесь(на этом форуме) нет ИМХО. Народ в Казахстане такой что ли?
#!perl my( $i_b,$i ); my @array; for(my $i=1; $i<10000; $i++) { push @array, (1..25); } @array = sort { $a <=> $b } @array; foreach( @array ) { if( $_ == 20 ) { $i++; next; } last if( $i ); $i_b++; } if( $i ) { @array = ( ( splice @array ,$i_b,$i,() ),@array ); } print "@array";
З.Ы.
Есть более специальные форумы на которых ЕСТЬ умные люди, готовые помочь, здесь(на этом форуме) нет ИМХО. Народ в Казахстане такой что ли?
#5
Отправлено 15.12.2002, 10:12:47
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
у меня то вариантов много..и у вас не самое банальное... вот например...
1)заменить число x в массиве на заведомо меньшее1(если такое существует), отсортировать sort и сделать обратную замену![:smoke:](http://vse.kz/public/style_emoticons/default/smile.gif)
2) воспользоватся чуть модифицированным методом qsort или пузырька...
1)заменить число x в массиве на заведомо меньшее1(если такое существует), отсортировать sort и сделать обратную замену
![:smoke:](http://vse.kz/public/style_emoticons/default/smile.gif)
2) воспользоватся чуть модифицированным методом qsort или пузырька...
#8
Отправлено 23.12.2002, 10:36:24
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
да конечно же есть.Tzar на Perl это так:
@array=sort{if($b==20){1}elsif($a==20){-1}else{$a<=>$b}}@array;
Думаю можно найти способ быстрее Добровольцы поискать есть?
я вот поискал и нашел быстрый способ - временная сложность почти линейная (я думаю реализовать это на перле несложно)
и тебе советую воспользоваться поиском - тема сортировки и поиска довольно обширная
#9
Отправлено 10.03.2003, 16:36:10
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Вы не поверите но на тестовом массиве так быстрее
Дело было вечером делать было нечего
for ( my $i=1; $i<10; $i++ )
{
push @array, ( 1..25 );
}
push @array, grep{($_==20)?((unshift @array, $_),0):1} sort{$a<=>$b}(splice @array,0,scalar @array);
print "@array";
Дело было вечером делать было нечего
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0