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的session cookie错误
Aug 09 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
php读取excel文件的简单实例
Aug 26 PHP
CI框架中zip类应用示例
Jun 17 PHP
php实现表单多按钮提交action的处理方法
Oct 24 PHP
盘点PHP和ASP.NET的10大对比!
Dec 24 PHP
java微信开发之上传下载多媒体文件
Jun 24 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
PHP简单验证码功能机制实例详解
Mar 27 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 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简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
奇怪的PHP引用效率问题分析
2012/03/23 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
2013/03/19 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
js实现蒙版效果
2020/01/11 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
Python中正则表达式详解
2017/05/17 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
干部现实表现材料
2014/02/13 职场文书
保护环境的建议书
2014/03/12 职场文书
2015年班干部工作总结
2015/04/29 职场文书
绿里奇迹观后感
2015/06/15 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL
改造DE1103三步曲
2022/04/07 无线电