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 相关文章推荐
IIS环境下快速安装、配置和调试PHP5.2.0
Dec 17 PHP
php session 预定义数组
Mar 16 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
php实现文件下载实例分享
Jun 02 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
php创建session的方法实例详解
Jan 27 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
php验证码生成器
May 24 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 PHP
PHP程序守护进程化实现方法详解
Jul 16 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加入ftp扩展的解决方法
2013/02/07 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
详解JS浏览器事件循环机制
2019/03/27 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
初步解析Python下的多进程编程
2015/04/28 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
美容院经理岗位职责
2014/04/03 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
JavaScript数组 几个常用方法总结
2021/11/11 Javascript
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android