看了算法导论堆排序,用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 堆排序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)