|
练习堆排序的一个程序
<? //堆排序应用 class heapsort { var $a; function setarray($a)//取得数组 { $this->a=$a; } function runvalue($b,$c)//$a 代表数组,$b代表排序堆,$c代表结束点, { while($b<$c) { $h1=2*$b; $h2=(2*$b+1); if($h1>$c) break; elseif($h1==$c) { if($this->a[$b]>$this->a[$h1]) { $t=$this->a[$b]; $this->a[$b]=$this->a[$h1]; $this->a[$h1]=$t; $la=1; } else $la=1; } elseif(($this->a[$b]>$this->a[$h1])||($this->a[$b]>$this->a[$h2])) { if($this->a[$h1]>=$this->a[$h2]) { $t=$this->a[$h2]; $this->a[$h2]=$this->a[$b]; $this->a[$b]=$t; $b=$h2; } else { $t=$this->a[$h1]; $this->a[$h1]=$this->a[$b]; $this->a[$b]=$t; $b=$h1; } } else $la=1; if($la==1) break; } } function getarray() { $all=count($this->a); $b=Floor(($all-1)/2); for($i=$b;$i>=1;$i--)//先将数组建立成堆 { $this->runvalue($i,($all-1)); } for($i=1;$i<$all;$i++) { $a1=($all-$i); if($i==1) { $t=$this->a[1]; $this->a[1]=$this->a[$a1]; $this->a[$a1]=$t; } else { $end=($all-$i); $this->runvalue(1,$end); $t=$this->a[1]; $this->a[1]=$this->a[$end]; $this->a[$end]=$t; } } return $this->a; } } ////// class sortarr { var $a; function setarray($a)//取得数组 { $this->a=$a; } function runvalue($i) { $max=$this->a[$i]; $id=$i; for($j=($i+1);$j<count($this->a);$j++) { if($this->a[$j]>$max) { &nb
|