PHP两种快速排序算法实例

 更新时间:2015年02月15日 11:00:37   投稿:junjie  
这篇文章主要介绍了PHP两种快速排序算法实例,本文直接给出实现代码,分别使用递归法、迭代法实现,需要的朋友可以参考下

虽然在PHP这样的web应用开发中,我们不是太强调排序的重要性,因为PHP自身已经带了例如sort()等这样强大的排序函数,但是在一些重要的场合,例如某些高并发的场合,我想排序算法的影响已经不能忽略。所以在此介绍递归排序和迭代排序。

递归法

/**
* 递归法实现的快速排序
*/
function quicksort($seq)
{
    $k = $seq[0];
    $x = array();
    $y = array();
    for($i=1; $i< $_size; $i++) {
      if($seq[$i] <= $k) {
        $x[] = $seq[$i];
      } else {
        $y[] = $seq[$i];
      }
    }
    $x = quicksort($x);
    $y = quicksort($y);
    return array_merge($x, array($k), $y);
  } else {
    return $seq;
  }
}

迭代法:

/**
* 迭代法的快速排序
*/
function quicksortx(&$seq)
{
  $stack = array($seq);
  $sort = array();
  while ($stack) {
    $arr = array_pop($stack);
    if(count($arr) <= 1) {
      if(count($arr) == 1) {
        $sort[] = &$arr[0];
      }
      continue;
    }
    $k = $arr[0];
    $x = array();
    $y = array();
    $_size = count($arr);
    for($i =1 ;$i < $_size; $i++) {
      if($arr[$i] <= $k) {
        $x[] = &$arr[$i];
      } else {
        $y[] = &$arr[$i];
      }
    }
    !empty($y) && array_push($stack, $y);
    array_push($stack, array($arr[0]));
    !empty($x) && array_push($stack, $x);
  }
  return $sort;
}

使用:

/**
*产生一个随机数组
*/
for($i=0;$i<5;$i++){
  $testArr[]=mt_rand(0,100);
}
var_dump($testArr);
var_dump(quicksort($testArr));

var_dump(quicksortx($testArr));

相关文章

  • smarty内部日期函数html_select_date()用法实例分析

    smarty内部日期函数html_select_date()用法实例分析

    这篇文章主要介绍了smarty内部日期函数html_select_date()用法,以实例形式较为详细的分析了smarty模板中内部日期函数html_select_date()的各项参数、功能及使用技巧,需要的朋友可以参考下
    2015-07-07
  • PHP框架Laravel学习心得体会

    PHP框架Laravel学习心得体会

    Laravel是一套简洁、优雅的PHP Web开发框架 (PHP Web Framework) 。在世界(不含中国)PHP框架的占有率超过40%。下面通过本文给大家分享我的PHP框架Laravel学习心得体会,欢迎大家给我留言
    2015-10-10
  • Zend Framework框架db类select查询器join链表使用示例

    Zend Framework框架db类select查询器join链表使用示例

    这篇文章主要介绍了Zend Framework框架的Db类select查询器join链表使用示例,需要的朋友可以参考下
    2014-03-03
  • Laravel框架Eloquent ORM新增数据、自定义时间戳及批量赋值用法详解

    Laravel框架Eloquent ORM新增数据、自定义时间戳及批量赋值用法详解

    这篇文章主要介绍了Laravel框架Eloquent ORM新增数据、自定义时间戳及批量赋值用法,结合实例形式详细分析了Laravel框架Eloquent ORM通过模型新增数据、时间戳设置、批量赋值模型、Create新增等相关使用方法,需要的朋友可以参考下
    2019-12-12
  • php实现文件编码批量转换

    php实现文件编码批量转换

    转换文件编码,比如原来是gbk,转换成utf-8的,可以转单个文件也可以转换整个目录的文件,可选是否递归目录
    2014-03-03
  • php使用array_chunk函数将一个数组分割成多个数组

    php使用array_chunk函数将一个数组分割成多个数组

    这篇文章主要介绍了php使用array_chunk函数将一个数组分割成多个数组,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • php数组删除元素示例

    php数组删除元素示例

    在某个数组中删除一个元素,我是直接用的unset,也不管unset之后会发生什么。但今天看到的东西却让我大吃一惊,并不是我想象的那样,我用示例来说明
    2014-03-03
  • Laravel框架搜索分页功能示例

    Laravel框架搜索分页功能示例

    这篇文章主要介绍了Laravel框架搜索分页功能,涉及Laravel框架数据库查询、搜索及分页功能实现技巧,需要的朋友可以参考下
    2019-02-02
  • PHP表单验证内容是否为空的实现代码

    PHP表单验证内容是否为空的实现代码

    下面小编就为大家带来一篇PHP表单验证内容是否为空的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • php版微信公众平台入门教程之开发者认证的方法

    php版微信公众平台入门教程之开发者认证的方法

    这篇文章主要介绍了php版微信公众平台入门教程之开发者认证的方法,结合实例形式分析了php版微信公众平台开发者认证的步骤与相关操作技巧,需要的朋友可以参考下
    2016-09-09

最新评论