develooper Front page | perl.fwp | Postings from July 2001

Re: Sorting in-place

Thread Previous | Thread Next
From:
Abigail
Date:
July 26, 2001 00:09
Subject:
Re: Sorting in-place
Message ID:
20010726070801.14138.qmail@foad.org
On Wed, Jul 25, 2001 at 07:02:11PM -0500, Craig S.Cottingham wrote:
> 
> > I guess the questions are: 1. why doesn't this work?  and 2. can it be
> > made to work?
> 
> 2. Yes, sort of.
> 
> #!/usr/bin/perl -w
> 
> use strict;
> 
> my @list = (1, 4, 2, 8, 5, 7, 3, 6, 0, 9);
> 
> my @sorted = sort { $a <=> $b } @list;
> 
> for (1..@list) {
>      my @dummy = sort {
>          ($a,$b) = ($b,$a) if (($a <=> $b) > 0);
>          0;
>      } @list;
> }
> 
> local $, = ', ';
> print "Original: @list\n";
> print "Sorted:   @sorted\n";


I believe that it produced the right results on the inputs you tested
it with. But can you proof your trick will always sort the array?

> Hmm. Shuffling the contents of a list?
> 
> #!/usr/bin/perl -w
> 
> use strict;
> 
> my @list = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
> local $, = ', ';
> print "Original: @list\n";
> 
> for (1..6) {
>      my @dummy = sort {
>          ($a,$b) = ($b,$a) if ((rand(2) - 1) < 0);
>          0;
>      } @list;
> }
> 
> print "Shuffled: @list\n";


I doubt very much that this is a fair shuffle. See, for a fair shuffle
each of the @list! possible permutations should have the same chance
of resulting. And, under the assumption 'rand' is perfect', I don't see
your shuffle doing that.



Abigail

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About