In article <[EMAIL PROTECTED]> wrote
"Sanilkumar"
<[EMAIL PROTECTED]>:
> this program is not working please help me
Sorry, I couldn't find the error instantly.
But perhaps I can help you to improve your programming style.
1. Give your variables names that explain themselves.
Readability comes always first.
2. Use use strict; and use warnings;
3. Try to write more Perlish, not C-like.
> for(my $i=0;$i<3;$i++)
> {
> my $r=$i+1;
> print("Enter the $r number");
> local$a[$i]=<STDIN>;
^^ there should be a whitespace.
Outside the loop, @a has no new values !!
> }
Perlish: print "Enter the $_ number", $a[$_-1] = <STDIN> for (1 .. 4);
> $first=0;
> $last=2;
> quicksort(\@a,$first,$last);
> system(clear);
> print("\t@a");
> sub quicksort(\@$$)
> {
> my($num,$fi,$la)=@_;
> print("\t$fi");
> if($la > 0 && $fi!=$la)
Perlish: return unles $la > 0 && $fi != $la;
> {
> my $pivot=$num->[$fi];
> my $spl=splitpoint(\@num,$fi,$la,$pivot);
> my $wi = $spl-1;
> my $ww = $spl+1;
> if($wi > $fi)
> {
> quicksort(\@num,$fi,$wi);
> }
> if($ww < $la)
> {
> quicksort(\@num,$ww,$la);
> }
Perlish:
my ($wi, $ww) = ($spl-1, $spl+1);
$wi > $fi and quicksort(\@num,$fi,$wi);
$ww < $la and quicksort(\@num,$ww,$la);
> }
> }
> sub splitpoint(\@$$$)
> {
> my($num,$fn,$ln,$pi)=@_;
> do
> {
> while($num->[$fn] < $pi)
> {
> $fn=$fn+1;
> }
> while($num->[$ln] > $pi)
> {
> $ln=$ln-1;
> }
> if($fn<$ln)
> {
> @{ $num }[$fn, $ln] = @{ $num }[$ln, $fn];
> }
> }while($fn < $ln);
Shouldn't it be a while (...) { ... } loop, if I remember correctly.
If so, Perlish:
while ($fn < $ln) {
$fn++ while $num->[$fn] < $pi;
$ln-- while $num->[$ln] > $pi;
@{$num}[$fn,$ln] = @{$num}[$ln,$fn] if $fn<$ln;
}
> return($fn);
Why do you return a list and not a scalar value.
There's a big difference between
return $fn;
and
return ($fn);
> }
>
Best Wishes,
Andrea
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]