<?xml version="1.0" encoding="windows-1252"?>
<node id="888321" title="Re: Sorting Arrays Without using SORT function" created="2011-02-15 12:24:30" updated="2011-02-15 12:24:30">
<type id="11">
note</type>
<author id="58196">
Fletch</author>
<data>
<field name="doctext">
&lt;p&gt;
Sure, but runtime depends on your luck.
&lt;/p&gt;
&lt;c&gt;
#!/usr/bin/env perl
use strict;
use warnings;
use List::Util qw( shuffle reduce );

my @list = qw( f a d e z x c b );

sub in_order {
  my $state = 1;
  our( $a, $b );
  my $ordered = reduce { if( $state and $b lt $a ) { $state = undef; } $b } @_;
  return $state;
}

my $shuffles = 0;
my @ordered = @list;
my %memory;
until ( in_order( @ordered ) ) {
  $memory{ join("\0",@ordered) } = 1;
  while( 1 ) {
    @ordered = shuffle( @list );
    $shuffles++;
    last unless $memory{ join("\0",@ordered) };
  }
}

print "took $shuffles shuffles to get\n\t", join( "\n\t", @ordered ), "\n";

exit 0;

__END__
&lt;/c&gt;
&lt;div class="pmsig"&gt;&lt;div class="pmsig-58196"&gt;
&lt;p&gt;
The cake is a lie.&lt;br /&gt;
The cake is a lie.&lt;br /&gt;
The cake is a lie.&lt;br /&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</field>
<field name="root_node">
888306</field>
<field name="parent_node">
888306</field>
</data>
</node>
