[Gllug] [OT] sort algorithms
Andrew Farnsworth
farnsaw at stonedoor.com
Tue Nov 29 22:13:34 UTC 2011
Presuming your predefined sequence is fixed or known prior to the sort
process, you can assign sequencial values to a hash when the keys are
the predefined values in the predefined order. Then sort using a custom
sort on the values of the hash rather than the keys. For example, in Perl,
you could do it this way.
my @predefinedList = (1,5,8,4,3,6,9);
my %orderedHash;
my $order = 1;
foreach my $key (@predefinedList)
{
$orderedHash{$key} = $order++;
}
my @unsortedList = (9,3,4,8,1);
my @sortedList = sort {$orderedHash{$a} <=> $orderedHash{$b}} @unsortedList;
print "@sortedList\n";
exit;
Andy F
On Tue, Nov 29, 2011 at 4:34 PM, James Courtier-Dutton <
james.dutton at gmail.com> wrote:
> Hi,
>
> I have a problem with a special sort I need to do.
> I have some ideas for an efficient solution, but I wished to ask if
> anyone else had a better idea.
> My current best solution is to do a transform on the source data using
> hash lookups on the predefined sequence.
> So the source data is changed into numbers that when sorted are in
> numerical order, do a normal numerical sort, and then repeat the
> inverse of the transform at the end.
>
> Problem is as follows.
> Target pattern is a list of numbers in a certain predefined sequence.
> The source data is a set of numbers that is always a subset of the
> predefined sequence.
> I need a way to sort the source data so that the numbers appear in the
> same order as the predefined sequence.
>
> Eg.
> Predefined sequence
> 1 5 8 4 3 6 9
>
> Source data
> 9 3 4 8 1
>
> Result
> 1 8 4 3 9
>
> Kind Regards
>
> James
> --
> Gllug mailing list - Gllug at gllug.org.uk
> http://lists.gllug.org.uk/mailman/listinfo/gllug
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.lug.org.uk/pipermail/gllug/attachments/20111129/ffea6cc1/attachment.html>
-------------- next part --------------
--
Gllug mailing list - Gllug at gllug.org.uk
http://lists.gllug.org.uk/mailman/listinfo/gllug
More information about the GLLUG
mailing list