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 相关文章推荐
phplock(php进程锁) v1.0 beta1
Nov 24 PHP
PHP SPL使用方法和他的威力
Nov 12 PHP
PHP中array_slice函数用法实例详解
Nov 25 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
php通过淘宝API查询IP地址归属等信息
Dec 25 PHP
PHP基于ORM方式操作MySQL数据库实例
Jun 21 PHP
thinkphp分页集成实例
Jul 24 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
PHP chop()函数讲解
Feb 11 PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 09 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中base_convert()进制数字转换函数实例
2014/11/20 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
2017/04/28 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
SQL Server面试题
2016/10/17 面试题
素质拓展感言
2014/01/29 职场文书
大学新学期计划书
2014/04/28 职场文书
党员目标管理责任书
2014/07/25 职场文书
党风廉正建设责任书
2015/01/29 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电