Slashdot is powered by your submissions, so send in your scoop

 



Forgot your password?
typodupeerror
×
Perl

Journal glimmy's Journal: Merge Sort

A little snippet of Perl, and the first Perl I have done in a long while. Still waiting for Perl 6...

sub merge {
    my ($left, $right) = @_;
    my @merged;
 
    while ((scalar(@$left) > 0) && (scalar(@$right))) {
 
        if ($left->[0] <= $right->[0]) {
            push @merged, shift(@$left);
        } else {
            push @merged, shift(@$right);
        }
    }
 
    if (scalar(@$left) > 0) {
        push @merged, shift(@$left);
    }
 
    if (scalar(@$right) > 0) {
        push @merged, shift(@$right);
    }
 
    return @merged;
}
 
sub mergesort {
    my @list = @_;
    my (@left,@right);
 
    if (scalar(@list) <= 1) {
        return @list;
    } else {
 
        my $middlin = scalar(@list) / 2;
 
        foreach (0..($middlin - 1)) {
            push @left, $list[$_];
        }
 
        foreach ($middlin..(scalar(@list) - 1)) {
            push @right, $list[$_];
        }
 
        @left = mergesort(@left);
        @right = mergesort(@right);
 
        return &merge(\@left,\@right);
    }
}

This discussion has been archived. No new comments can be posted.

Merge Sort

Comments Filter:

MESSAGE ACKNOWLEDGED -- The Pershing II missiles have been launched.

Working...