PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】


Posted in PHP onFebruary 07, 2017

php三种基础算法:冒泡,插入和快速排序法

$array = array(2,3,5,6,9,8,1);

//冒泡排序思想,前后元素比较
function sort_bulldle($array){
  $num = count($array);
  for($i=0; $i<$num; $i++){
    $tmp = $array[$i];
    for ($j=$i-1; $j>=0; $j--) {
      if ($tmp < $array[$j]) {
        $arr[$j+1] = $arr[$j];
        $arr[$j] = $tmp;
      } else {
        break;
      }
    }
  }
  return $array;
}

//插入排序思想,就是从第二个元素开始,到最后一个元素都是这个需要排序的元素
function sort_bulldle($arr){
  for($i=1, $len=count($arr); $i<$len; $i++) {
    $tmp = $arr[$i];
    for($j=$i-1;$j>=0;$j--) {
      if($tmp < $arr[$j]) {
        $arr[$j+1] = $arr[$j];
        $arr[$j] = $tmp;
      } else {
        break;
      }
    }
  }
  return $arr;
}

//快速排序,找一个基准点把数组分成两组比较
function sort_bulldle($array){
    $num = count($array);
    if($num<=1) {
        return $array;
    }
    $base_num = $array[0];
    $left_array = array();
    $right_array = array();
    for($i=1; $i<$num; $i++) {
        if ($base_num > $array[$i]) {
            $left_array[] = $array[$i];
        }else
        {
            $right_array[] = $array[$i];
        }
    }
    $left_array = sort_bulldle($left_array);
    $right_array = sort_bulldle($right_array);
    return array_merge($left_array, array($base_num), $right_array);
}

本文实例总结了PHP常用排序算法。分享给大家供大家参考,具体如下:

class bevin{
public $public = 'public';
private $private = 'private';
protected $protected = 'protected';
//final $final = 'final';
static $static = 'static';
function __construct(){
 $this->protected = 'change private';
}
public function setValue($a){
 self::$static = $a;
}
public function getValue(){
 echo $this->private;
}
function __destruct(){
 echo 'asdfsadf';
}
}
class paixu {
// 基本排序
public function t_sortArray($array) {
 if(is_array($array) && count($array)>1) {
 for($i=0; $i<count($array); $i++) {
 for($j=($i+1); $j<count($array); $j++) {
 $temp = $array[$i];
 if($array[$j]<$array[$i]) {
 $array[$i] = $array[$j];
 $array[$j] = $temp;
 }
 }
 }
 return $array;
 } else {
 return $array;
 }
}
// 冒泡排序
public function c_sortArray($array) {
 if(!is_array($array) || count($array)<=1){ return $array; }
 $status = false;
 foreach($array as $key=>$v) {
 if($key>0) {
 if($array[$key-1]>$array[$key]) {
 $array[$key] = $array[$key-1];
 $array[$key-1] = $v;
 $status = true;
 }
 }
 }
 if($status) {
 return $this->c_sortArray($array);
 } else {
 return $array;
 }
}
// 快速排序
public function v_sortArray($array) {
 if(!is_array($array) || count($array)<=1){ return $array; }
 if(count($array)>2) {
 $m = $array[floor(count($array)/2)+1];
 } else {
 if($array[0]>$array[1]) {
 $temp = $array[0];
 $array[0] = $array[1];
 $array[1] = $temp;
 }
 return $array;
 }
 $leftarray = array();
 $rightarray = array();
 foreach($array as $key=>$v) {
 if($v>$m) {
 $rightarray[] = $v;
 }
 if($v<$m) {
 $leftarray[] = $v;
 }
 if($v==$m) {
 $mid[] = $v;
 }
 }
 $nleftarray = $this->v_sortArray($leftarray);
 $nrightarray = $this->v_sortArray($rightarray);
 return array_merge($nleftarray,$mid,$nrightarray);
}
// 直接插入排序
public function i_sortArray($array) {
 if(!is_array($array) || count($array)<=1){ return $array; }
 $newarray = array($array[0]);
 $temp = 0;
 foreach($array as $k=>$v) {
 if($k>0) {
 if($v>=$newarray[count($newarray)-1]) {
 $newarray[] = $v;
 } else {
 foreach($newarray as $nk=>$nv) {
 if($v<$nv) {
 $temparray = array();
 foreach($newarray as $ck=>$cv) {
  if($ck<$nk) {
  $temparray[$ck] = $cv;
  } elseif($ck==$nk) {
  $temparray[$ck] = $v;
  $temparray[($ck+1)] = $cv;
  } else {
  $temparray[($ck+1)] = $cv;
  }
 }
 $newarray = $temparray;
 break;
 }
 }
 }
 }
 }
 return $newarray;
}
}
$bevin = new paixu;
$array = array(5,4,5,4,4,5,5,5,5,5);
$v = $bevin->t_sortArray($array);
print_r($v);
$v = $bevin->c_sortArray($array);
print_r($v);
$v = $bevin->v_sortArray($array);
print_r($v);
$v = $bevin->i_sortArray($array);
print_r($v);

运行结果:

Array
(
 [0] => 4
 [1] => 4
 [2] => 4
 [3] => 5
 [4] => 5
 [5] => 5
 [6] => 5
 [7] => 5
 [8] => 5
 [9] => 5
)
Array
(
 [0] => 4
 [1] => 4
 [2] => 4
 [3] => 5
 [4] => 5
 [5] => 5
 [6] => 5
 [7] => 5
 [8] => 5
 [9] => 5
)
Array
(
 [0] => 4
 [1] => 4
 [2] => 4
 [3] => 5
 [4] => 5
 [5] => 5
 [6] => 5
 [7] => 5
 [8] => 5
 [9] => 5
)
Array
(
 [0] => 4
 [1] => 4
 [2] => 4
 [3] => 5
 [4] => 5
 [5] => 5
 [6] => 5
 [7] => 5
 [8] => 5
 [9] => 5
)

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP写入WRITE编码为UTF8的文件的实现代码
Jul 07 PHP
php 无限级 SelectTree 类
May 19 PHP
基于Discuz security.inc.php代码的深入分析
Jun 03 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
sae使用smarty模板的方法
Dec 17 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 PHP
有关PHP 中 config.m4 的探索
Aug 26 PHP
php实现图片按比例截取的方法
Feb 06 #PHP
php实现的中文分词类完整实例
Feb 06 #PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 #PHP
php使用变量动态创建类的对象用法示例
Feb 06 #PHP
PHP单例模式定义与使用实例详解
Feb 06 #PHP
PHP第三方登录―QQ登录实现方法
Feb 06 #PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 #PHP
You might like
PHP6 mysql连接方式说明
2009/02/09 PHP
php下批量挂马和批量清马代码
2011/02/27 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
Django URL传递参数的方法总结
2016/08/28 Python
python文件写入write()的操作
2019/05/14 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
linux面试题参考答案(8)
2016/04/19 面试题
关于圣诞节的广播稿
2014/01/26 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
主持词开场白
2014/03/17 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
摩登时代观后感
2015/06/03 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书