php堆排序(heapsort)练习_PHP
Jun 01, 2016 am 11:58 AM复制代码 代码如下:
//堆排序应用
class heapsort
{
var $a;
function setarray($a)//取得数组
{
$this->a=$a;
}
function runvalue($b,$c)//$a 代表数组,$b代表排序堆,$c代表结束点,
{
while($b {
$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 {
$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
{
if($this->a[$j]>$max)
{
$max=$this->a[$j];
$id=$j;
}
}
if($id!=$i)
{
$t=$this->a[$id];
$this->a[$id]=$this->a[$i];
$this->a[$i]=$t;
}
}
function getarray()
{
for($i=1;$ia)-1);$i++)
$this->runvalue($i);
return $this->a;
}
}
//////
$s=microtime();
$st=explode(' ',$s);
$st1=$st[0];
$st2=$st[1];
//////
$v=10000;//排序数组长度
$brr[0]=0;
for($i=1;$i {
$brr[$i]=rand();
}
$check=2;//1 stand for heapsort 2 stand for another sort
echo'after sort!!
';
if($check==1)
{
$arr=new heapsort;
$arr->setarray($brr);
$ok=$arr->getarray();
for($i=1;$i {
$j=((($i+1)>($v-1))?($v-1):($i+1));
/*
if($ok[$j] echo''.$ok[$i].'
';
else
echo$ok[$i].'
';*/
}
}
elseif($check==2)
{
$arr=new sortarr;
$arr->setarray($brr);
$ok=$arr->getarray();
for($i=1;$i {
$j=((($i+1)>($v-1))?($v-1):($i+1));/*
if($ok[$j] echo''.$ok[$i].'
';
elseif($ok[$j]>$ok[$i])
echo''.$ok[$i].'
';
else
echo$ok[$i].'
';*/
}
}
elseif($check==3)
{
sort($brr);
$ok=$brr;
for($i=1;$i {
$j=((($i+1)>($v-1))?($v-1):($i+1));/*
if($ok[$j] echo''.$ok[$i].'
';
elseif($ok[$j]>$ok[$i])
echo''.$ok[$i].'
';
else
echo$ok[$i].'
';*/
}
}
else
{
echo'参数输入错误!!
';
}
//////
$s=microtime();
$st=explode(' ',$s);
$sta=$st[0];
$stb=$st[1];
$ss1=$sta-$st1;
$ss2=$stb-$st2;
if($check==1)
$word='堆排序';
elseif($check==2)
$word='常规排序';
elseif($check==3)
$word='普通排序';
else
$word='无排序';
echo$word.'对具有'.$v.'个元素的数组排序,消耗了'.($ss2+$ss1).'秒时间';
//////
?>

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP
