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 中文字符入库或显示乱码问题的解决方法
Apr 12 PHP
php下载文件的代码示例
Jun 29 PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
yii分页组件用法实例分析
Dec 28 PHP
分享php邮件管理器源码
Jan 06 PHP
Zend Framework路由器用法实例详解
Dec 11 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
Laravel配置全局公共函数的方法步骤
May 09 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
用Python实现最速下降法求极值的方法
2019/07/10 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
C语言面试题
2015/10/30 面试题
公司出纳岗位职责
2013/12/07 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
芙蓉镇观后感
2015/06/10 职场文书
入党后的感想
2015/08/10 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server