sorting - How can I get this basic Perl sub program that sorts to work properly? -


i brand new perl. can me out , give me tip or solution on how sorting sub program work. know has how arrays passed sub programs. searched online , did not find answer satisfied with... suggestions helpful s.o. users give me too. have program print sorted array in main sub program. currently, printing elements of array @a in original order. want sub program modify array when print array in sorted order. suggestions appreciated. of course, want see simplest way fix this.

sub sort {      @array = @_;      $i;     $j;     $imin;      ( $i = 0; $i < @_ - 1; $i++ ) {          $imin = $i;          ( $j = $i + 1; $j < @_; $j++ ) {              if ( $array[$j] < $array[$imin] ) {                  $imin = $j;             }         }          if ( $imin != $i ) {              $temp = $array[$i];             $array[$i] = $array[$imin];             $array[$imin] = $temp;         }     } } 

then call main sub program:

sub main {      @a = (-23,3,234,-45,0,32,12,54,-10000,1);      &sort(@a);     $i;      ( $i = 0; $i < @a; $i++ ) {          print "$a[$i]\n";      } }  main; 

when sub following assignment my @array = @_, creating copy of passed contents. therefore modifications values of @array not effect @a outside subroutine.

following clarification personal learning exercise, there 2 solutions.

1) can return sorted array , assign original variable

sub mysort {     @array = @_;     ...     return @array; }  @a = mysort(@a) 

2) or can pass reference array, , work on reference:

sub mysort {     $arrayref = shift;     ... }  mysort(\@a) 

also, it's idea not use sub named sort since that's that's builtin function. duplicating code using perl's sort:

@a = sort {$a <=> $b} @a; 

also, loops inside sub should rewritten utilize last index of @array, written $#array, , range operator .. useful incrementors :

for ( $j = $i + 1; $j <= $#array; $j++ ) {  # or simpler:  $j ($i+1 .. $#array) { 

and finally, because you're new, should pass on scripts should start use strict; , use warnings;. reasons why: why use strict , warnings?


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -