首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Comb_sort在Perl中不工作

Comb_sort在Perl中不工作
EN

Stack Overflow用户
提问于 2015-06-02 23:17:45
回答 1查看 51关注 0票数 0

我用Perl编写了一个梳状排序。一切看起来都很好,但是程序不工作,编译器也没有显示任何错误。我想请你帮忙。守则是:

代码语言:javascript
复制
@tab = (1,3,5,22,2,12,1);
$gap = scalar(@tab);
$replace = 1;

while ($gap>1 || $replace)
{
    $gap = ($gap * 10) / 13;
    if ($gap == 0)
    {        
        $gap = 1;
    }

    $replace = 0;
    for ($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";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-03 01:19:19

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

代码语言:javascript
复制
$ 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))后,代码会对数据集OK进行排序,并对数据集进行排序。

代码语言:javascript
复制
#!/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";

样本运行-您的数据

代码语言:javascript
复制
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

样本运行-我的数据

代码语言:javascript
复制
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

如果您计划就此问更多关于Perl的问题,请确保您已经修复了使用use strict;use warnings;报告的所有明显问题--或者,如果不能,您的问题应该是如何修复所收到的特定警告或错误。

请记住学习如何创建一个MCVE (最小、完整、可验证的示例)或SSCCE (简短的,完整的,正确的例子) -两个名称和链接为相同的基本想法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30608175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档