http://qs321.pair.com?node_id=124567


in reply to crop-sort: Maintaining a Top-10 Array

Alternately, one could use a binary search to find where to insert and then insert. The binary search has O(log N) time.

sub crop_binary_insert { my ($a, $x) = @_; my ($min, $max) = (0, $#{$a}); return if ($a->[-1] >= $x); # don't bother to insert if we don't hav +e to while ($min != $max) { my $mid = int( ($min + $max)/2 ); if ($a->[$mid] > $x) { $min = $mid+1; } else { $max = $mid; } } pop @$a; splice @$a, $min, 0, $x; }

update: fixed up indention slightly.

update 2: s/\$i/\$mid/ (Oops! Thanks to petral.)