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读取html并截取字符串的简单代码
Nov 30 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
基于curl数据采集之正则处理函数get_matches的使用
Apr 28 PHP
PHP5函数小全(分享)
Jun 06 PHP
CI(CodeIgniter)框架中的增删改查操作
Jun 10 PHP
PHP临时文件的安全性分析
Jul 04 PHP
linux下实现定时执行php脚本
Feb 13 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
php实现可运算的验证码
Nov 10 PHP
php中引用符号(&amp;)的使用详细介绍
Dec 06 PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 PHP
php中序列化与反序列化详解
Feb 13 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
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
使用JavaScript进行表单校验功能
2017/08/01 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
Python callable()函数用法实例分析
2018/03/17 Python
Python实现的knn算法示例
2018/06/14 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
python 同时运行多个程序的实例
2019/01/07 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
德国足球商店:OUTFITTER
2019/05/06 全球购物
工厂保安员岗位职责
2014/01/31 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
股权投资意向书
2014/04/01 职场文书
年终奖发放方案
2014/06/02 职场文书
学习保证书
2015/01/17 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
js实现自动锁屏功能
2021/06/02 Javascript
mysql创建存储过程及函数详解
2021/12/04 MySQL
Nginx配置根据url参数重定向
2022/04/11 Servers