[mplspm]: In a sorted list

Troy Johnson troy.johnson at myrealbox.com
Thu Mar 21 23:55:18 CST 2002


The previous stuff is a result of my daily language jumping. I like this
code better, so if you would like to criticize it (please do!), please
do this version.

More "perly" and less "liney":

>>>>>START>>>>>
#!/usr/local/bin/perl -w

my @array = ("aa" .. "yy");

foreach $s (qw(cc gg mm aa yy zz mmm))
{
	my $rv = findit($s, \@array);
	print "debug: \$rv = $rv\n";
}

sub findit
{
        my $string = shift;
        my $sar = shift;	# sorted array reference
        my $try = my $interval = my $size = scalar @{$sar};
        my $dir = -1;
        my %seen = ();
        my $found = 0;
        
        while (1)
        {
        	$interval = int($interval / 2) || 1;
        	$try += $dir * $interval;
		if ($try < 0 or $try >= $size) { last; }
        	$dir = $string cmp $sar->[$try];
		print "debug: $size  $interval  $try  $dir  $string $sar->[$try]\n";
        	if (not $dir) { $found = 1; last; }
        	if (exists $seen{$sar->[$try]}) { last; }
        	$seen{$sar->[$try]} = undef;
        }

	return $found;
}
<<<<<<END<<<<<<


--------------------------------------------------
Minneapolis Perl Mongers mailing list

To unsubscribe, send mail to majordomo at pm.org
with "unsubscribe mpls" in the body of the message.



More information about the Mpls-pm mailing list