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 相关文章推荐
phpMyAdmin 安装教程全攻略
Mar 19 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
Jun 09 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
如何写php守护进程(Daemon)
Dec 30 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
PHP 与 UTF-8 的最佳实践详细介绍
Jan 04 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
Jun 06 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 PHP
laravel admin实现分类树/模型树的示例代码
Jun 10 PHP
详解PHP用mb_string处理windows中文字符
May 26 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
德劲1102收音机的打理维修案例
2021/03/02 无线电
文章推荐系统(二)
2006/10/09 PHP
php入门教程 精简版
2009/12/13 PHP
php遍历目录viewDir函数
2009/12/15 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
JS 实现完美include载入实现代码
2010/08/05 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
python实现图片批量压缩程序
2018/07/23 Python
Python基础之文件读取的讲解
2019/02/16 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
如何打开WebSphere远程debug
2014/10/10 面试题
在校大学生个人的自我评价
2014/02/13 职场文书
2015年复活节活动总结
2015/02/27 职场文书
公司档案管理制度
2015/08/05 职场文书
教务处干事工作总结
2015/08/14 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
Python多个MP4合成视频的实现方法
2021/07/16 Python
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL
配置nginx负载均衡
2022/05/06 Servers