Comb_sort在Perl中不起作用

时间:2015-06-02 23:17:46

标签: perl sorting

我在Perl中写了一个梳子。一切看起来都不错,但程序不起作用,编译器也没有显示任何错误。我想请你帮忙。代码是:

Public Function UserName()
Try
Return Report.User!UserID
Catch
Return "System"
End Try
End Function  

1 个答案:

答案 0 :(得分:2)

修订后的代码使用$n但从未设置它。如果您使用use warnings;use strict;,那么您就会知道这个问题。有了这些指令,我得到:

$ perl comb.pl
Global symbol "$n" requires explicit package name at comb.pl line 20.
Execution of comb.pl aborted due to compilation errors.
$

代码中只有5个变量,包括$n,因此my只需要出现5次。

$n设置为初始值$gap(又名scalar(@tab)),代码会对您的数据集进行排序,然后我的。

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

my @tab = ( 19, 13, 2, 5, 3, 11, 17, 7 );
#my @tab = (1,3,5,22,2,12,1);
my $gap = scalar(@tab);
my $replace = 1;
my $n = $gap;

print "Unsorted array: @tab\n";

while ($gap>1 || $replace)
{
    $gap = ($gap * 10) / 13;
    $gap = 1 if ($gap == 0);
    print "Gap = $gap\n";

    $replace = 0;
    for (my $i=0; $i+$gap < $n; $i++)
    {
        if ($tab[$i]>$tab[$i+$gap])
        {
            ($tab[$i], $tab[$i+$gap]) = ($tab[$i+$gap],$tab[$i]);
            $replace = 1;
        }
    }
}

print "Sorted array: @tab\n";

示例运行 - 您的数据

Unsorted array: 1 3 5 22 2 12 1
Gap = 5.38461538461539
Gap = 4.14201183431953
Gap = 3.18616294947656
Gap = 2.45089457652043
Gap = 1.88530352040033
Gap = 1.45023347723102
Gap = 1.11556421325463
Gap = 0.85812631788818
Sorted array: 1 1 2 3 5 12 22

示例运行 - 我的数据

Unsorted array: 19 13 2 5 3 11 17 7
Gap = 6.15384615384615
Gap = 4.73372781065089
Gap = 3.64132908511607
Gap = 2.80102237316621
Gap = 2.15463259474323
Gap = 1.65740968826403
Gap = 1.27493052943387
Gap = 0.980715791872205
Sorted array: 2 3 5 7 11 13 17 19

如果您打算在SO上询问有关Perl的任何其他问题,请确保您已使用use strict;use warnings;修复了报告的所有明显问题 - 或者,如果您不能,您的问题应该是如何解决您遇到的具体警告或错误。

请记住研究如何创建MCVE(Minimal, Complete, Verifiable Example)或 SSCCE(Short, Self-Contained, Correct Example) - 两个相同基本想法的名称和链接。