Я должен отсортировать число целых чисел, которые могут иметь значения от 30 000 000 до 350 000 000. Там будет между 0 и 65.535 целых чисел, со средним счетом 20.000. Использование ОЗУ не имеет значения, важна только скорость.
Позже мне также придется разделить их на группы, причем деление всегда устанавливается, когда разрыв между двумя из этих значений составляет> 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;