in reply to finding min and max of array recursivly

Solved ... Slightly Round about .. but good enough for my 
class. I relise that this is very sloppy, scope wise and 
the way variables are being passed, but it works :)

thanks all who provided help.

sub Partition {

    ($A, $lower, $upper, my $min, my $max, $from) = @_;

    $n = $upper - $lower + 1;
    if ($n == "2") {
        if ($$A$lower < "$$A$upper") {
            $min = $$A$lower if $$A$lower < $min;
            $max = $$A$upper if $$A$upper > $max;
            $counter++;
        }
        elsif ($$A$upper < "$$A$lower") {
            $min = $$A$upper if $$A$upper < $min;
            $max = $$A$lower if $$A$lower > $max;
            $counter++;
        }
        return ($min,$max);
    }
    if ($upper <= "$lower") { 
        return ($min, $max);
    }
    
    $mid = int(($upper - $lower) / 2) + $lower;
    if ($$A$mid < "$min") {
        $min = $$A$mid;
        $counter++;
    }
    elsif ($$A$mid > "$max") {
        $max = $$A$mid;
        $counter++;
    }

    ($min, $max) = Partition($A,$lower,$mid,$min,$max,"part_1");
    ($min, $max) = Partition($A,$mid + 1,$upper2,$min,$max,"part_2");
    return($min,$max);
}

@A = (153, 1, 12, 65, 60, 214, 5, 21, 23, 19);

    $length = @A - 1;
    $mid    = 4;
    $min    = $A$mid;
    $max    = $A$mid;
    $min1   = $min;
    $max1   = $max;
    $mid1   = $mid;
    $upper2 = $mid;
    $counter = 0;

    ($min2, $max2) = Partition(\@A,0,$mid1,$min,$max,"main_1");
    $upper2 = $length;
    ($min3, $max3) = Partition(\@A,$mid1 + 1,$length,$min1,$max1,"main_2");

    if ($min2 < $min3) {
        $min = $min2;
    }
    else {
        $min = $min3;
    }
    if ($max2 > $max3) {
        $max = $max2;
    }
    else {
        $max = $max3;
    }
  • Comment on Re: finding min and max of array recursivly