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中支持多种编码的中文字符串截取函数!
Mar 20 PHP
PHP校验ISBN码的函数代码
Jan 17 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
深入浅析php json 格式控制
Dec 24 PHP
Yii中CGridView实现批量删除的方法
Dec 28 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
Thinkphp实现站点静态化的方法详解
Mar 21 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
PHP获取MySQL执行sql语句的查询时间方法
Aug 21 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 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操作xml代码
2010/06/17 PHP
常用PHP框架功能对照表
2014/10/23 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
详解vee-validate的使用个人小结
2017/06/07 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
举例讲解Python常用模块
2019/03/08 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
python 并发下载器实现方法示例
2019/11/22 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
Python定义函数实现累计求和操作
2020/05/03 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
医学检验专业个人求职信范文
2013/12/04 职场文书
农民致富事迹材料
2014/01/23 职场文书
接受捐赠答谢词
2014/01/27 职场文书
微信营销策划方案
2014/02/24 职场文书
小小商店教学反思
2014/04/27 职场文书
简单的辞职信模板
2015/05/12 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android