Мне нужно отсортировать несколько целых чисел, которые могут иметь значения от 30.000.000 до 350.000.000. Будут от 0 до 65.535 целых чисел, при этом средний счет равен 20 000. Использование ОЗУ не имеет значения, и важна только скорость.Что такое быстрый алгоритм сортировки для целых чисел 0-65535?
Позже я также должен разбить их на группы, причем делитель всегда устанавливается, когда разрыв между двумя из этих значений составляет> 65,535, для чего мне нужен алгоритм.
Если это имеет значение, алгоритм будет использоваться в скрипте Perl.
Редактировать: Подумав об этом и прочитав ответы, я понял что-то: я действительно не забочусь о самих данных. Поскольку я действительно хочу только найти начальные и конечные значения групп с малыми пробелами, сортировка должна только создавать ведра и может отбрасывать данные.
Edit2: После некоторого тестирования и опробовать ответы, данные, самый быстрый способ я нашел, было это:
my @sort = sort {$a <=> $b} @item_offsets;
my @buckets;
my $start = shift @sort;
push @buckets, [$start,$start];
for my $item (@sort) {
if ($item < $buckets[$#buckets][1]+$gap) {
$buckets[$#buckets][1] = $item;
}
else {
push @buckets, [$item,$item];
}
}
say $#buckets;
Модуль сортировки radix можно найти на CPAN @ http://search.cpan.org/dist/Sort-Radix/ – draegtun 2008-11-12 19:48:01