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+DBM的同学录程序(4)
Oct 09 PHP
PHP 如何向 MySQL 发送数据
Oct 09 PHP
PHP+Tidy-完美的XHTML纠错+过滤
Apr 10 PHP
PHP连接SQLServer2005 的问题解决方法
Jul 19 PHP
php调用google接口生成二维码示例
Apr 28 PHP
ThinkPHP中U方法的使用浅析
Jun 13 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
php使用Jpgraph创建折线图效果示例
Feb 15 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
php文件上传类的分享
Jul 06 PHP
php压缩文件夹最新版
Jul 18 PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 22 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 adodb连接mssql解决乱码问题
2009/06/12 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
2014/08/21 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
python中pygame模块用法实例
2014/10/09 Python
python获取目录下所有文件的方法
2015/06/01 Python
python实现汉诺塔算法
2021/03/01 Python
Python对excel文档的操作方法详解
2018/12/10 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
新手学python应该下哪个版本
2020/06/11 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
简单的JAVA编程面试题
2013/03/19 面试题
Servlet面试题库
2015/07/18 面试题
大学四年学习的自我评价分享
2013/12/09 职场文书
企业文化建设实施方案
2014/03/22 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
党支部半年考察意见
2015/06/01 职场文书
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技