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 将excel导入mysql
Nov 09 PHP
PHP 工厂模式使用方法
May 18 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
php class中public,private,protected的区别以及实例分析
Jun 18 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
Sep 29 PHP
php判断对象是派生自哪个类的方法
Jun 20 PHP
php进程间通讯实例分析
Jul 11 PHP
使用Yii2实现主从数据库设置
Nov 20 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 16 PHP
jQuery+PHP实现图片上传并提交功能
Jul 27 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 版本]
2007/03/20 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Python 修改列表中的元素方法
2018/06/26 Python
python实现根据文件格式分类
2019/10/31 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
三星印度官网:Samsung印度
2019/08/03 全球购物
如何写一个自定义标签
2012/12/28 面试题
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
咖啡馆创业计划书
2014/01/26 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
课外活动实习计划
2015/01/19 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏