Acme::Rautavistic::Sort - Rautavistic sort functions
Version 0.01
use Acme::Rautavistic::Sort ':all'; # default alphanumeric comparison @res = dropsort(qw(3 2 3 1 5)); # qw(3 3 5) @res = dropsort(qw(cc bb dd aa ee)); # qw(cc dd ee) # numeric comparison @res = dropsort sub { $_[0] <=> $_[1] }, 1, 11, 2;
This module provides rautavistic sort functions. For more description of the functions see below.
From http://www.dangermouse.net/esoteric/dropsort.html:
Dropsort is a fast, one-pass sorting algorithm suitable for many applications.
Algorithm Description Dropsort is run on an ordered list of numbers by examining the numbers in sequence, beginning with the second number in the list. If the number being examined is less than the number before it, drop it from the list. Otherwise, it is in sorted order, so keep it. Then move to the next number.
After a single pass of this algorithm, the list will only contain numbers that are at least as large as the previous number in the list. In other words, the list will be sorted! Analysis Dropsort requires exactly n-1 comparisons to sort a list of length n, making this an O(n) algorithm, superior to the typical O(n logn) algorithms commonly used in most applications.
Dropsort is what is known in the computer science field as a lossy algorithm. It produces a fast result that is correct, but at the cost of potentially losing some of the input data. Although to those not versed in the arts of computer science this may seem undesirable, lossy algorithms are actually a well-accepted part of computing. An example is the popular JPEG image compression format, which enjoys widespread use because of its versatility and usefulness. In similar fashion, dropsort promises to revolutionise the sorting of data in fields as diverse as commercial finance, government record-keeping, and space exploration.
dropsort
@SORTED = dropsort @VALUES; @SORTED = dropsort sub { $_[0] <=> $_[1]}, @VALUES;
Does drop sort.
If the first argument is a sub reference, use that to do the comparison of two values.
Please note, that due to the nature of the algorithm, just reversing $_[0] and $_[1] does not reverse the order of the result. You can only use it to modify the comparator, eg. to use number comparison instead of the default string comparator.
Use
@SORTED = reverse dropsort @VALUES;
to reverse the result.
Steffen Schwigon, <ss5@renormalist.net>
<ss5@renormalist.net>
Felix Antonius Wilhelm Ostmann (benchmark, optimization and stunt coordinator)
dropsort currently only sorts by string comparison. This will hopefully be fixed by being able to argument it with a comparison function, similar to Perl's sort.
Please report any bugs or feature requests to bug-acme-rautavistic-sort at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Acme-Rautavistic-Sort. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
bug-acme-rautavistic-sort at rt.cpan.org
You can find documentation for this module with the perldoc command.
perldoc Acme::Rautavistic::Sort
You can also look for information at:
AnnoCPAN: Annotated CPAN documentation
http://annocpan.org/dist/Acme-Rautavistic-Sort
CPAN Ratings
http://cpanratings.perl.org/d/Acme-Rautavistic-Sort
RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Acme-Rautavistic-Sort
Search CPAN
http://search.cpan.org/dist/Acme-Rautavistic-Sort
For more information about rautavistic sort and rautavistic in general see
http://www.dangermouse.net/esoteric/dropsort.html
http://www.rautavistik.de (in german)
Copyright 2008 Steffen Schwigon, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Acme::Rautavistic::Sort, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Acme::Rautavistic::Sort
CPAN shell
perl -MCPAN -e shell install Acme::Rautavistic::Sort
For more information on module installation, please visit the detailed CPAN module installation guide.