Ich muss eine ganze Reihe von Ganzzahlen sortieren, die Werte zwischen 30.000.000 und 350.000.000 haben können. Es wird zwischen 0 und 65.535 Ganzzahlen geben, wobei die durchschnittliche Anzahl 20.000 beträgt. RAM-Nutzung ist irrelevant und Geschwindigkeit ist nur wichtig.Was ist der schnellste Sortieralgorithmus für 0-65535 Ganzzahlen?
Später werde ich sie auch in Gruppen aufteilen müssen, wobei die Division immer dann gesetzt wird, wenn die Lücke zwischen zwei dieser Werte> 65.535 ist, wozu ich den Algorithmus brauche.
Wenn es einen Unterschied macht, wird der Algorithmus in einem Perl-Skript verwendet.
Edit: Nachdem ich darüber nachgedacht und die Antworten gelesen habe, bin ich zu etwas gekommen: Ich kümmere mich eigentlich nicht um die Daten selbst. Da ich nur die Anfangs- und Endwerte von Gruppen mit kleinen Lücken finden möchte, muss die Sortierung nur Buckets erstellen und die Daten verwerfen.
Edit2: Nach einigen Tests und die Antworten zur Verfügung gestellt versuchen, fand der schnellste Weg, ich war:
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;
Sie haben es geschafft, die Probleme wirklich gut zusammenzufassen. Ich habe tatsächlich, während ich die Antworten hier gelesen habe, darüber nachgedacht, so etwas zu tun, war mir aber noch nicht so sicher. Vielen Dank. :) – Mithaldu
Ich habe gerade meine Antwort editiert und ein bisschen nicht verwandten Text verschrottet, basierend auf Ihren Änderungen. Die resultierende Antwort sollte viel schneller sein, obwohl beide lineare Zeitalgorithmen waren. – Brian