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 相关文章推荐
提问的智慧(2)
Oct 09 PHP
使用JSON实现数据的跨域传输的php代码
Dec 20 PHP
PHP删除HTMl标签的实现代码
Jun 30 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
Sep 23 PHP
PHP判断数据库中的记录是否存在的方法
Nov 14 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
PHP list() 将数组中的值赋给变量的简单实例
Jun 13 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
Jan 16 PHP
laravel orm 关联条件查询代码
Oct 21 PHP
php修改word的实例方法
Nov 17 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
html中select语句读取mysql表中内容
2006/10/09 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
提高PHP编程效率的方法
2013/11/07 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
红米手机抢购的js代码
2014/03/10 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
javascript表单正则应用
2017/02/04 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
Python简单进程锁代码实例
2015/04/27 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
Python中模块string.py详解
2017/03/12 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
深入解析神经网络从原理到实现
2019/07/26 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
python新手学习可变和不可变对象
2020/06/11 Python
python 读取.nii格式图像实例
2020/07/01 Python
项目资料员岗位职责
2013/12/10 职场文书
冰淇淋店的创业计划书
2014/02/07 职场文书
如何写自我鉴定
2014/03/19 职场文书
倡议书范文格式
2014/05/12 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android