php堆排序(heapsort)练习


Posted in PHP onNovember 13, 2013
<?
//堆排序应用
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 相关文章推荐
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
php启动时候提示PHP startup的解决方法
May 07 PHP
利用php递归实现无限分类 格式化数组的详解
Jun 08 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 PHP
ThinkPHP中order()使用方法详解
Apr 19 PHP
PHP数组实例详解
Jun 26 PHP
php函数mkdir实现递归创建层级目录
Oct 27 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
PHP简单实现二维数组赋值与遍历功能示例
Oct 19 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
May 24 PHP
php生成EAN_13标准条形码实例
Nov 13 #PHP
使用php计算排列组合的方法
Nov 13 #PHP
测试php函数的方法
Nov 13 #PHP
PHP中判断变量为空的几种方法小结
Nov 12 #PHP
php不允许用户提交空表单(php空值判断)
Nov 12 #PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 #PHP
session在php5.3中的变化 session_is_registered() is deprecated in
Nov 12 #PHP
You might like
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
jQuery 选择器详解
2015/01/19 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
javascript实现倒计时提示框
2021/03/02 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
Windows下PyMongo下载及安装教程
2015/04/27 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
用python实现刷点击率的示例代码
2019/02/21 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
Python 3.8 新功能全解
2019/07/25 Python
Django实现跨域的2种方法
2019/07/31 Python
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
企业内部培训方案
2014/02/04 职场文书
语文教学随笔感言
2014/02/18 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
施工单位安全责任书
2014/07/24 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书