开发者社区> 问答> 正文

perl语言的几种排序?比如,快速排序法,插入排序法,归并排序,选择排序等等,写几个都可以

我只写出来了两种冒泡排序。谢谢帮忙!不胜感激!

展开
收起
知与谁同 2018-07-19 15:36:10 1934 0
1 条回答
写回答
取消 提交回答
  • 阿里云开发者社区运营负责人。原云栖社区负责人。

    sub qsort {
    my @arr = @_;
    if ($#arr <= 1) {
    if ($#arr == 1 && $arr[1] < $arr[0]) {
    @arr[1,0] = @arr[0,1];

    return @arr;
    }
    my $p   = $arr[int(rand($#arr + 1))];
    my (@s, @e, @b);
    foreach my $e(@arr) {
    if    ($e < $p) {push @s, $e;}
    elsif ($e > $p) {push @b, $e;}
    else {push @e, $e;}
    }
    my @res;
    if ($#s >= 0) {push @res, qsort(@s);}
    if ($#e >= 0) {push @res, @e;}
    if ($#b >= 0) {push @res, qsort(@b);}
        return @res;
    }

    sub merge_sort {
    my @arr = @_;
    if ($#arr <= 1) {
    if ($#arr == 1 && $arr[1] < $arr[0]) {
    @arr[1,0] = @arr[0,1];

    return @arr;
    }
    my $m = $#arr >> 1;
    my @l = merge_sort(@arr[0..$m]);
    return @l if ($m == $#arr);
    my @r = merge_sort(@arr[$m+1 .. $#arr]);
    my @m;
    my ($l, $r) = (0, 0);
    while ($l <= $#l && $r <= $#r) {
    if ($l[$l] < $r[$r]) {push @m, $l[$l++];}
    else {push @m, $r[$r++];}
    }
    push @m, @l[$l .. $#l] if ($l <= $#l);
    push @m, @r[$r .. $#r] if ($r <= $#r);
    return @m;
    }
    my @arr = map{int rand(100)}0..20;
    my @res = qsort(@arr);
    print "@res\n";
    @arr = map{int rand(100)}0..20;
    @res = merge_sort(@arr);
    print "@res\n";
    2019-07-17 22:50:10
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载