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 相关文章推荐
php+oracle 分页类
Oct 09 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
php项目中百度 UEditor 简单安装调试和调用
Jul 15 PHP
ThinkPHP模型详解
Jul 27 PHP
PHP的命令行命令使用指南
Aug 18 PHP
PHP内核探索之变量
Dec 22 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
php无限级评论嵌套实现代码
Apr 18 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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
PHP 数组入门教程小结
2009/05/20 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP异常处理浅析
2015/05/12 PHP
关于JavaScript的一些看法
2009/05/27 Javascript
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
python中实现控制小数点位数的方法
2019/01/24 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
英国在线花园中心:You Garden
2018/06/03 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
原材料检验岗位职责
2014/03/15 职场文书
产品推广策划方案
2014/05/10 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
土建技术员岗位职责
2015/04/11 职场文书
终止劳动合同通知书
2015/04/16 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
Python如何导出导入所有依赖包详解
2021/06/08 Python