#!/usr/bin/perl use strict; use warnings 'all'; use Data::Dumper; # NAME: sortieren() # USE: Array nach dem angegebenen Algorithmus sortieren. # PARAMETER: 1. Ausgangsarray # 2. Gleich-Array # 3. Ungleich-Array # RETURNS: Koordinaten-Hash ( Referenz ) sub sortieren(\@\@\@) { # parameter holen my($start, $gleich, $ungleich) = @_; my $coords = {}; # ausgangsarray abarbeiten while (@{$start}) { # quellelement holen my $quell = $start->[0]; # coordinaten array anlegen my $co = $coords->{$quell} = []; # nach gleichen elementen suchen for my$j ($[..$#{$start}) { push(@{$co}, $j) if $start->[$j] eq $quell } # haben wir mehrere gleiche elemente? if (@{$co} > 1) { # nach gleich kopieren push(@{$gleich}, @{$start}[@{$co}]); } # quelle nach ungleich kopieren push(@{$ungleich}, $quell); # quellelement und duplikate aus dem start array loeschen foreach my$ele (sort { $b <=> $a } @{$co}) { splice(@{$start}, $ele, 1) } } # koordinaten der jeweiligen quellelemente zurueckgeben return $coords; } # sortieren # Ausgangsarray initialisieren my @arr = qw(Hans Maria Jochen Hans Maria Johann Hans Rainer); # die beiden Arrays zum speichern der Werte definieren my @gleich; my @ungleich; # sortieren my $coords = sortieren(@arr, @gleich, @ungleich); # ausgeben print Dumper(\@arr, \@gleich, \@ungleich, $coords);