码迷,mamicode.com
首页 > 编程语言 > 详细

四种排序算法PHP实现类

时间:2015-06-18 09:24:35      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

四种排序算法的PHP实现:
1) 插入排序(Insertion Sort)的基本思想是: 
每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

2) 选择排序(Selection Sort)的基本思想是: 
每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。

3) 冒泡排序的基本思想是: 
两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。

4) 快速排序实质上和冒泡排序一样,都是属于交换排序的一种应用。所以基本思想和上面的冒泡排序是一样的。

参考:http://www.lai18.com/content/433167.html

 

下面是实现代码:

 

  1 <?php
  2 /**
  3  * 
  4  * @author quanshuidingdang
  5  * @edit http://www.lai18.com
  6  */
  7 class Sort {
  8   private $arr  = array(); 
  9   private $sort  = ‘insert‘;
 10   private $marker = ‘_sort‘;
 11   private $debug = TRUE;
 12   /**
 13    * 构造函数
 14    * @edit http://www.lai18.com
 15    * @param  array  例如:
 16    $config = array (
 17    ‘arr‘ => array(22,3,41,18) , //需要排序的数组值
 18    ‘sort‘ => ‘insert‘, //可能值: insert, select, bubble, quick
 19    ‘debug‘ => TRUE //可能值: TRUE, FALSE
 20    )
 21    */
 22   public function __construct($config = array()) {
 23     if ( count($config) > 0) {
 24       $this->_init($config);
 25     }
 26   }
 27   /**
 28    * 获取排序结果
 29    */
 30   public function display() {
 31     return $this->arr;
 32   }
 33   /**
 34    * 初始化
 35    *
 36    * @param  array
 37    * @return bool
 38    */
 39   private function _init($config = array()) {
 40     //参数判断
 41     if ( !is_array($config) OR count($config) == 0) {
 42       if ($this->debug === TRUE) {
 43         $this->_log("sort_init_param_invaild");
 44       }
 45       return FALSE;
 46     }
 47     //初始化成员变量
 48     foreach ($config as $key => $val) {
 49       if ( isset($this->$key)) {
 50         $this->$key = $val;
 51       }
 52     }
 53     //调用相应的成员方法完成排序
 54     $method = $this->sort . $this->marker;
 55     if ( ! method_exists($this, $method)) {
 56       if ($this->debug === TRUE) {
 57         $this->_log("sort_method_invaild");
 58       }
 59       return FALSE;
 60     }
 61     if ( FALSE === ($this->arr = $this->$method($this->arr)))
 62       return FALSE;
 63     return TRUE;
 64   }
 65   /**
 66    * 插入排序
 67    * 
 68    * @param  array
 69    * @return bool
 70    */
 71   private function insert_sort($arr) {
 72     //参数判断
 73     if ( ! is_array($arr) OR count($arr) == 0) {
 74       if ($this->debug === TRUE) {
 75         $this->_log("sort_array(insert)_invaild");
 76       }
 77       return FALSE;
 78     }
 79     //具体实现
 80     $count = count($arr);
 81     for ($i = 1; $i < $count; $i++) {
 82       $tmp = $arr[$i];
 83       for($j = $i-1; $j >= 0; $j--) { 
 84         if($arr[$j] > $tmp) {
 85           $arr[$j+1] = $arr[$j];
 86           $arr[$j] = $tmp;
 87         }
 88       }
 89     }
 90     return $arr;
 91   }
 92   /**
 93    * 选择排序
 94    * 
 95    * @param  array
 96    * @return bool
 97    */
 98   private function select_sort($arr) {
 99     //参数判断
100     if ( ! is_array($arr) OR count($arr) == 0) {
101       if ($this->debug === TRUE) {
102         $this->_log("sort_array(select)_invaild");
103       }
104       return FALSE;
105     }
106     //具体实现
107     $count = count($arr);
108     for ($i = 0; $i < $count-1; $i++) {
109       $min = $i;
110       for ($j = $i+1; $j < $count; $j++) {
111         if ($arr[$min] > $arr[$j]) $min = $j;
112       }
113       if ($min != $i) {
114         $tmp = $arr[$min];
115         $arr[$min] = $arr[$i];
116         $arr[$i] = $tmp;
117       }
118     }
119     return $arr;
120   }
121   /**
122    * 冒泡排序
123    * 
124    * @param  array
125    * @return bool
126    */
127   private function bubble_sort($arr) {
128     //参数判断
129     if ( ! is_array($arr) OR count($arr) == 0) {
130       if ($this->debug === TRUE) {
131         $this->_log("sort_array(bubble)_invaild");
132       }
133       return FALSE;
134     }
135     //具体实现
136     $count = count($arr);
137     for ($i = 0; $i < $count; $i++) {
138       for ($j = $count-1; $j > $i; $j--) {
139         if ($arr[$j] < $arr[$j-1]) {
140           $tmp = $arr[$j];
141           $arr[$j] = $arr[$j-1];
142           $arr[$j-1] = $tmp;
143         }
144       }
145     }
146     return $arr;  
147   }
148   /**
149    * 快速排序
150    * 
151    * @param  array
152    * @return bool
153    */
154   private function quick_sort($arr) {
155     //具体实现
156     if (count($arr) <= 1) return $arr; 
157     $key = $arr[0];
158     $left_arr = array();
159     $right_arr = array();
160     for ($i = 1; $i < count($arr); $i++){
161       if ($arr[$i] <= $key)
162         $left_arr[] = $arr[$i];
163       else
164         $right_arr[] = $arr[$i];
165     }
166     $left_arr = $this->quick_sort($left_arr);
167     $right_arr = $this->quick_sort($right_arr); 
168  
169     return array_merge($left_arr, array($key), $right_arr);
170   }
171   /**
172    * 日志记录
173    */
174   private function _log($msg) {
175     $msg = ‘date[‘ . date(‘Y-m-d H:i:s‘) . ‘] ‘ . $msg . ‘\n‘;
176     return @file_put_contents(‘sort_err.log‘, $msg, FILE_APPEND);
177   }
178 }
179 /*End of file sort.php*/
180 /*Location htdocs/sort.php */


PHP实用算法案例实现整理:

1php堆排序实现原理与应用方法

2php模拟用户自动在qq空间发表文章的方法

3PHP实现检测客户端是否使用代理服务器及其匿名级别

4PHP实现采集抓取淘宝网单个商品信息

5php模拟登陆的实现方法分析

6php rsa加密解密使用详解

7PHP生成算术验证码【原创】

8PHP如何获取客户端真实IP地址?

9PHP汉字转换为拼音的类

10PHP通过气象局开放API查询指定城市(区县)天气

11php上传中文文件名乱码问题处理方案

12PHP处理大量表单字段的便捷方法

13自己写的php中文截取函数mb_strlen和mb_substr

14PHP四大基本排序算法实例

15workerman PHP聊天室框架

16php获取文件名后缀常用方法小结

17用php来限制每个ip每天浏览页面数量的实现思路

18PHP树的深度编历生成迷宫及A*自动寻路算法实例分析

19PHP实现扎金花游戏之大小比赛的方法

20PHP排序算法类实例

四种排序算法PHP实现类

标签:

原文地址:http://www.cnblogs.com/ruthon/p/4584862.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!