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+mysql 实现身份验证代码
Mar 24 PHP
PHP 登录完成后如何跳转上一访问页面
Jan 14 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
Jun 22 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
Aug 20 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
非常实用的php验证码类
May 15 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
Yii 2中的load()和save()示例详解
Aug 03 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 PHP
PHP 时间处理类Carbon
May 20 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
基于php冒泡排序算法的深入理解
2013/06/09 PHP
yii操作cookie实例简介
2014/07/09 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
php编程每天必学之表单验证
2016/03/01 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
PHP登录(ajax提交数据和后台校验)实例分享
2016/12/29 PHP
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
详解Vue 事件修饰符capture 的使用
2017/12/29 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
原生js实现分页效果
2020/09/23 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
Python中集合类型(set)学习小结
2015/01/28 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
python购物车程序简单代码
2018/04/18 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
移动通信行业实习自我鉴定
2013/09/28 职场文书
办公室驾驶员岗位职责
2013/11/15 职场文书
国际贸易专业推荐信
2013/11/15 职场文书
新郎父亲婚宴答谢词
2014/01/11 职场文书
工作表现评语
2014/01/19 职场文书
新年晚会主持词
2014/03/24 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
2015年班组长工作总结
2015/04/10 职场文书
2016年教代会开幕词
2016/03/04 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
hive数据仓库新增字段方法
2022/06/25 数据库
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS