Just want to point out that the algorithm as given is incorrect. n is the number of elements in the array, so the first line should read:
function reverse_in_place(a[0 .. (n - 1)])
Alternatively, you would need to change the arithmetic:
function reverse_in_place(a[0 .. n])
for i from 0 to floor( ((n + 1) / 2) - 1 )
tmp := a[i]
a[i] := a[n - i]
a[n - i] := tmp
Update 1: Implementing the algorithm in Perl is straightforward, provided you are allowed to use the built-in functions split and join (scalar isn’t really needed in the sub):
use strict;
use warnings;
my $string = 'abcdefghi';
print 'Original string: ', $string, "\n";
print 'Using function: ', reverse_in_place($string), "\n";
print 'Using reverse: ', scalar reverse ($string), "\n"; # For c
+omparison
sub reverse_in_place
{
my ($string) = @_;
my @array = split //, $string;
my $n = scalar @array;
for (0 .. $n / 2 - 1)
{
my $tmp = $array[$_];
$array[$_] = $array[$n - $_ - 1];
$array[$n - $_ - 1] = $tmp;
}
return join('', @array);
}
Update 2: Fixed out-by-one error in the for loop. Thanks to j0se for pointing it out.
Hope that helps,
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.