php堆排序(heapsort)练习
php堆排序(heapsort)练习
发布时间:2016-12-29 来源:查字典编辑
摘要:复制代码代码如下:

复制代码 代码如下:

<?

//堆排序应用

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)

{

$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;$i<(count($this->a)-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<$v;$i++)

{

$brr[$i]=rand();

}

$check=2;//1 stand for heapsort 2 stand for another sort

echo'after sort!!<br>';

if($check==1)

{

$arr=new heapsort;

$arr->setarray($brr);

$ok=$arr->getarray();

for($i=1;$i<$v;$i++)

{

$j=((($i+1)>($v-1))?($v-1):($i+1));

/*

if($ok[$j]<$ok[$i])

echo'<font color=red>'.$ok[$i].'</font><br>';

else

echo$ok[$i].'<br>';*/

}

}

elseif($check==2)

{

$arr=new sortarr;

$arr->setarray($brr);

$ok=$arr->getarray();

for($i=1;$i<$v;$i++)

{

$j=((($i+1)>($v-1))?($v-1):($i+1));/*

if($ok[$j]<$ok[$i])

echo'<font color=red>'.$ok[$i].'</font><br>';

elseif($ok[$j]>$ok[$i])

echo'<font color=green>'.$ok[$i].'</font><br>';

else

echo$ok[$i].'<br>';*/

}

}

elseif($check==3)

{

sort($brr);

$ok=$brr;

for($i=1;$i<$v;$i++)

{

$j=((($i+1)>($v-1))?($v-1):($i+1));/*

if($ok[$j]<$ok[$i])

echo'<font color=red>'.$ok[$i].'</font><br>';

elseif($ok[$j]>$ok[$i])

echo'<font color=green>'.$ok[$i].'</font><br>';

else

echo$ok[$i].'<br>';*/

}

}

else

{

echo'参数输入错误!!<br>';

}

//////

$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).'秒时间';

//////

?>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新php教程学习
热门php教程学习
编程开发子分类