四种排序算法PHP实现类

四种排序算法的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排序算法类实例

时间: 2024-12-17 18:51:29

四种排序算法PHP实现类的相关文章

常用的四种排序算法

#include <stdio.h> void BubbleSort(int a[], int size, int order); void SelectSort(int a[], int size, int order); void InsertSort(int a[], int size, int order); void QuickSort(int a[], int size, int order); int main() { int a[5]={5,3,4,2,1}; int i; /

四种排序算法实现

目录 冒泡排序 冒泡算法 源代码(冒泡排序) 选择排序 选择算法 源代码(选择排序) 插入排序 插入算法 源代码(插入排序) 快速排序 快速排序算法 源代码(快速排序) 总结 References 冒泡排序 冒泡算法 比较相邻的元素.如果左边比右边大,就互换位置 对每一对相邻元素作同样的工作,从第一对到最后一对,完成后,最后元素为最大值 源代码(冒泡排序) //冒泡排序 public static void bubbleSort(int[] slist) { //从头开始遍历 for(int i

四种排序算法的时间比较

#include<iostream> #include<time.h> using namespace std; template<class T> inline void Swap(T& a, T& b); template<class T> void BubbleSort(T a[], int n); template<class T> void InsertionSort(T a[], int n); template<

php中的四种排序算法

1 1. 冒泡排序 2 3 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. 4 5 代码实现: 6 7 8 $arr=array(1,43,54,62,21,66,32,78,36,76,39); 9 function bubbleSort($arr) 10 { 11 $len=count($arr); 12 //该层循环控制 需要冒泡的轮数 13

四种排序算法与二分查找

1. 冒泡排序 func BubbleSort(slice []int) []int { i, j, okay, count := 0, 0, true, len(slice) for i = 0; i < count-1; i++ { //最多需要进行count-1轮比较 okay = true for j = 0; j < count-i-1; j++ { //每一轮比较的逻辑 if slice[j] > slice[j+1] { slice[j], slice[j+1] = sli

排序算法总结----运算类排序

运算排序 第一:计数排序 1:原理 对于每个输入数,确定小于该数的个数.这样可以直接把数放在输出数组的位置. 2:性能 最差时间复杂度 最优时间复杂度 平均时间复杂度 最差空间复杂度 注:稳定算法 3:应用 适合0~100的范围的数,当然可以和基排序结合而扩展数的范围. 4:实现 void CountingSort(int *A, int *B, int array_size, int k) { int i, value, pos; int * C=new int[k+1]; for(i=0;

算法—比较两种排序算法:选择排序和插入排序

现在我们已经实现了两种排序算法,我们很自然地想知道选择排序和插入排序哪种更快.这里我们第一次用实践说明我们解决这个问题的办法. 性质:对于随机排序的无重复主键的数组,插入排序和选择排序的运行时间是平方级别的,两者之比应该是一个较小的常数. 例证:这个结论在过去的半个世纪中已经在许多不同类型的计算机上经过了验证.在1980年本书第一版完成之时插入排序就比选择排序快一倍,现在仍然是这样,尽管那时这些算法将10万条数据排序需要几个小时而现在只需要几秒钟.在你的计算机上插入排序也比选择排序快一些吗?可以

Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等

本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排序.快速排序(重点).堆排序.归并排序等等.看下图: 给定数组:int data[] = {9,2,7,19,100,97,63,208,55,78} 一.直接插入排序(内部排序.O(n2).稳定) 原理:从待排序的数中选出一个来,插入到前面的合适位置. [java] view plain copy

常见的几种排序算法-插入、选择、冒泡、快排、堆排等

排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排序.快速排序(重点).堆排序.归并排序等等.看下图: 给定数组:int data[] = {9,2,7,19,100,97,63,208,55,78} 一.直接插入排序(内部排序.O(n2).稳定) 原理:从待排序的数中选出一个来,插入到前面的合适位置. package com.xtfggef.algo.sort; public