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 相关文章推荐
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
Jan 12 PHP
php curl的深入解析
Jun 02 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
php生成高清缩略图实例详解
Dec 07 PHP
ThinkPHP中limit()使用方法详解
Apr 19 PHP
php实现跨域提交form表单的方法【2种方法】
Oct 17 PHP
深入解析PHP中SESSION反序列化机制
Mar 01 PHP
一个非常实用的php文件上传类
Jul 04 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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滚动日志的代码实现
2015/06/10 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
javascript实现密码验证
2015/11/10 Javascript
原生js实现图片轮播特效
2015/12/18 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
vuex 中插件的编写案例解析
2019/06/10 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
分享一下Python数据分析常用的8款工具
2018/04/29 Python
基于python实现聊天室程序
2018/07/27 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
python中有关时间日期格式转换问题
2019/12/25 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
8种常用的Python工具
2020/08/05 Python
容易被忽略的Python内置类型
2020/09/03 Python
GAP美国官网:美国休闲时尚品牌
2016/08/26 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
params有什么用
2016/03/01 面试题
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
党员廉洁自律承诺书
2014/05/26 职场文书
会议欢迎标语
2014/06/30 职场文书
5.12护士节活动总结
2015/02/10 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技