堆排序 Perl 代碼實現

來源:互聯網
上載者:User

#!/usr/bin/perl -w<br />use strict;<br />use 5.010;</p><p>sub BigHeapAdjust($$/@){<br /> my($pos, $len, $arr) = @_;<br /> my $temp = $arr->[$pos];<br /> #沿節點值較大的兒子往下層篩選,2*r+1是左兒子,2*(r+1)是右兒子<br /> for(my $j = 2*$pos+1; $j <= $len-1; $j = 2*$j+1 ) {<br /> $j++ if $j<$len-1 && $arr->[$j+1] >= $arr->[$j];<br /> last if $temp >= $arr->[$j];<br /> $arr->[$pos] = $arr->[$j];<br /> $pos = $j;<br /> }<br /> $arr->[$pos] = $temp;<br />}<br />sub BigHeapSort($/@){<br /> my($len, $arr) = @_;<br /> for(my $i = $len/2 -1; $i >=0 ;$i-- ) {<br /> BigHeapAdjust($i, $len, @$arr);<br /> }<br /> $arr->[0] ^= $arr->[$len-1];<br /> $arr->[$len-1] ^= $arr->[0];<br /> $arr->[0] ^= $arr->[$len-1];<br /> #my $temp = $arr->[0];<br /> #$arr->[0] = $arr->[$len-1];<br /> #$arr->[$len-1] = $temp;</p><p> for(my $j = $len -1; $j>1; $j--) {<br /> BigHeapAdjust(0, $j, @$arr);<br /> $arr->[0] ^= $arr->[$j-1];<br /> $arr->[$j-1] ^= $arr->[0];<br /> $arr->[0] ^= $arr->[$j-1];<br /> #$temp = $arr->[0];<br /> #$arr->[0] = $arr->[$j-1];<br /> #$arr->[$j-1] = $temp;<br /> }<br />}<br />my @arr = qw/13 -54 87123 82344 -23 3451 54 -3/;<br />my $n = $#arr + 1;<br />BigHeapSort($n, @arr);<br />say "@arr";

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.