Каков самый быстрый алгоритм сортировки для 0-65535 целых чисел?

Вы можете просто включить этот файл в свой класс. Поместите это куда-нибудь значимое, например / vendor или / lib и include в класс, где вы хотите его использовать.

Некоторая информация о включении внешних файлов PHP: https://laraveldaily.com/how-to-use-external-classes-and-php-files-in-laravel-controller/

8
задан Mithaldu 12 November 2008 в 20:51
поделиться

6 ответов

Я просто сделал бы массив блоков прежде, чем выполнить алгоритм, один для каждой группы из 65 536 последовательных значений. Блоки будут содержать минуту и макс. значение их содержания, но не сохранят само содержание. После выполнения алгоритма сделайте единственную передачу по блокам. Если существует два последовательных непустых блока с минутой (bucket2) - макс. (bucket1) <65536, комбинируют их. Объединения не произойдет, пока алгоритм не заканчивает работать. Отбросьте любые пустые блоки. Этот алгоритм является линейным временем.

Примите во внимание Блочную сортировку.

17
ответ дан 5 December 2019 в 04:33
поделиться

Я использовал бы вид основания, так как необходимо сгруппировать вывод.

12
ответ дан 5 December 2019 в 04:33
поделиться

Маловероятно, что Вы сможете записать алгоритм сортировки в Perl, который будет работать лучше, чем встроенный Perl sort функция:

@numbers = sort {$a <=> $b} @numbers;

Можно экспериментировать с прагмой вида, чтобы видеть, лучше ли конкретный алгоритм:

use sort '_quicksort';
use sort '_mergesort';

Так как Ваши точки разделения будут варьироваться в зависимости от распределения данных, я думаю, что необходимо отсортировать весь список сначала затем цикл по нему, чтобы сделать вырезание.

my $prev  = shift @numbers;  # already sorted
my @group = [$prev];
my $i     = 0;

foreach my $n (@numbers) {
    $i++ if ($n - $prev > 65535);
    push @{$group[$i]}, $n;
    $prev = $n;
}
17
ответ дан 5 December 2019 в 04:33
поделиться

Я просто собирался сказать вид основания, http://en.wikipedia.org/wiki/Radix_sort однако, который мог быть немного, выше какого Вы надеялись реализовывать, Introsort обычно является принятым решением для сортировки для данных http://en.wikipedia.org/wiki/Introsort, это - изменение quicksort, который переключается для пирамидальной сортировки, когда это достигает меньших наборов, поскольку это быстрее на меньших наборах, чем quicksort.

5
ответ дан 5 December 2019 в 04:33
поделиться

Я попробовал бы это:

my @sorted = map { unpack "N" } sort map { pack "N" } @unsorted;
1
ответ дан 5 December 2019 в 04:33
поделиться

Если Вы используете число в качестве индекса к массиву и затем увеличиваете количество того положения, Вы "сгруппировали" их и сделали это в одной передаче.

в псевдокоде:

while(morenumbers)
  sorted[[unsorted[number]]++
  number++

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

0
ответ дан 5 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: