View Single Post
Old Aug 25th, 2006, 8:10 PM   #7
glimmy
Programmer
 
glimmy's Avatar
 
Join Date: May 2005
Location: Minnesota
Posts: 42
Rep Power: 0 glimmy is on a distinguished road
Send a message via AIM to glimmy
3) Perl- Mergesort
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);
	}
}
glimmy is offline   Reply With Quote