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 相关文章推荐
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
PHP开发中四种查询返回结果分析
Jan 02 PHP
php删除文件夹及其文件夹下所有文件的函数代码
Jan 23 PHP
PHP中对缓冲区的控制实现代码
Sep 29 PHP
php中stream(流)的用法
Mar 25 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 PHP
PHP调用C#开发的dll类库方法
Jul 28 PHP
PHP数组相关函数汇总
Mar 24 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
thinkPHP下ueditor的使用方法详解
Dec 26 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
很好用的PHP数据库类
2009/05/27 PHP
PHP之生成GIF动画的实现方法
2013/06/07 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
php微信开发自定义菜单
2016/08/27 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
2010年最佳jQuery插件整理
2010/12/06 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
python实现换位加密算法的示例
2018/10/14 Python
Python 画出来六维图
2019/07/26 Python
python实现桌面托盘气泡提示
2019/07/29 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
python mock测试的示例
2020/10/19 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
大学生职业生涯规划范文
2013/12/31 职场文书
高三地理教学反思
2014/01/11 职场文书
数学国培研修感言
2014/02/13 职场文书
初中生操行评语大全
2014/04/24 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
信用卡催款律师函
2015/05/27 职场文书
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server
Oracle 触发器trigger使用案例
2022/02/24 Oracle