Download | Plain Text | No Line Numbers


  1. #!/usr/bin/perl
  2.  
  3. use Data::Dumper;
  4. use strict;
  5.  
  6. my @a = (50, 60, 12, 45, 101, 18, 1, 67);
  7. #my @a = (1, 12, 18, 45, 50, 60, 67, 101);
  8. #@a = reverse(@a);
  9.  
  10. my $i;
  11. my $cmp = 0;
  12. my $mv = 0;
  13. for(my $j = 1; $j < scalar(@a); $j++)
  14. {
  15. my $key = $a[$j];
  16. $mv++;
  17. $i = $j - 1;
  18. while($i >= 0 && ($cmp++) && $a[$i] > $key)
  19. {
  20. $a[$i + 1] = $a[$i];
  21. $mv++;
  22. $i = $i - 1;
  23. }
  24. $a[$i + 1] = $key;
  25. $mv++;
  26. }
  27. print Dumper(@a);
  28.  
  29. print "keycnt=", scalar(@a), " moves=", $mv, " keycmp=", $cmp, $/;
  30.