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 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
深入解析php模板技术原理【一】
Jan 10 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
php实现用于计算执行时间的类实例
Apr 18 PHP
浅谈PHP中output_buffering
Jul 13 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
Jul 06 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
Apr 12 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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
php头像上传预览实例代码
2017/05/02 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
让微信小程序支持ES6中Promise特性的方法详解
2017/06/13 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
Python 初始化多维数组代码
2008/09/06 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
Python实现抢购IPhone手机
2018/02/07 Python
Python3 修改默认环境的方法
2019/02/16 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
python怎么判断模块安装完成
2020/06/19 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
Why do we need Unit test
2013/01/03 面试题
医院护士求职自荐信格式
2013/09/21 职场文书
团委竞选演讲稿
2014/04/24 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书