0
Thanks

A few words of thanks would be greatly appreciated.

Sorting a table without using the sort function






Getting started


First of all we initialize a variable $ max with the 1st value of table.
Then we will make a loop until the table still contains elements.
Using the splice function,we will empty the table.

Pseudocode


IF table contains elements 
    find the maximum  value
    determine the position of the element found 
    add the item to the top of the table sorted, in ascending order
    add the item to the end of the table sorted - in descending order 
    delete items found with splice - stopping condition for the loop 
    reset the position 
    reset the max$ with first item in the table decreased with splice 
END AS

The coding


#!/usr/bin/perl
use strict;use warnings;

my @tab = qw/9 3 7 14 8 7 25 12 1 6/;
my ($n,$max,@tri,@tri_desc);
$max = $tab[0];

print "@tab\n";
while(@tab){
        $_ > $max and $max = $_ for @tab;
        for (@tab){ $n++;last if $max == $_}
        unshift @tri,$max;
        push @tri_desc,$max;
        splice(@tab,$n-1,1);
        $n=0;
        $max = $tab[0];
}
print "ascending order:\t@tri\n";
print "descending order:\t@tri_desc\n";
__END__


Results

When using the following combination: 9 3 7 14 8 7 25 12 1 6
Ascending order: 1 3 6 7 7 8 9 12 14 25
Descending order: 25 14 12 9 8 7 7
0
Thanks

A few words of thanks would be greatly appreciated.

Ask a question
CCM is a leading international tech website. Our content is written in collaboration with IT experts, under the direction of Jean-François Pillou, founder of CCM.net. CCM reaches more than 50 million unique visitors per month and is available in 11 languages.
This document, titled « Sorting a table without using the sort function », is available under the Creative Commons license. Any copy, reuse, or modification of the content should be sufficiently credited to CCM (ccm.net).

0 Comments