Perl 堆排序

Perl 堆排序,第1张

概述看了算法导论堆排序,用Perl 实现一下,具体原理不解释,做个记录。 代码: @a = map {int(rand 100)} 1..20;sub build_heap{ my $length = $#_; for(my $i = $length>>1; $i >= 0; $i--){ heapnify(\@_, $length, $i); }

看了算法导论堆排序,用Perl 实现一下,具体原理不解释,做个记录。


代码:

@a = map {int(rand 100)} 1..20;sub build_heap{     my $length = $#_;     for(my $i = $length>>1; $i >= 0; $i--){          heapnify(\@_,$length,$i);     }}sub heapnify{     #~ $x++; #use it to trace how much times the procedure was run     my ($array,$index) = @_;         my $max = $array->[$index];     my $tmp = $index;     my $left = left($index);     my $right = right($index);         if($left <= $length && $array->[$left] > $max){          $max = $array->[$left];          $tmp = $left;     }     if($right <= $length && $array->[$right] > $max){          $max = $array->[$right];          $tmp = $right;     }         if($tmp != $index){          ($array->[$index],$array->[$tmp]) = ($array->[$tmp],$array->[$index]);          heapnify($array,$tmp) if $tmp <= $length>>1;     }}sub left      { ($_[0]<<1) + 1 }sub right     { left(@_) + 1 }sub max_heap{     build_heap(@_);     @_[0,-1] = @_[-1,0];     for(my $i=$#_-1;$i>0;$i--){          heapnify(\@_,$i,0);          @_[0,$i] = @_[$i,0];     }}max_heap(@a);print "@a\n";
总结

以上是内存溢出为你收集整理的Perl 堆排序全部内容,希望文章能够帮你解决Perl 堆排序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1283443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存