温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP中排序算法有哪些分类

发布时间:2021-08-12 15:03:58 来源:亿速云 阅读:178 作者:Leah 栏目:开发技术

今天就跟大家聊聊有关PHP中排序算法有哪些分类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

四种排序算法的PHP实现:

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

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

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

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

1. sort.php文件如下:

<?php /**  *   * @author quanshuidingdang  */ class Sort {   private $arr  = array();    private $sort  = 'insert';   private $marker = '_sort';   private $debug = TRUE;   /**    * 构造函数    *    * @param  array  例如:    $config = array (    'arr' => array(22,3,41,18) , //需要排序的数组值    'sort' => 'insert', //可能值: insert, select, bubble, quick    'debug' => TRUE //可能值: TRUE, FALSE    )    */   public function __construct($config = array()) {     if ( count($config) > 0) {       $this->_init($config);     }   }   /**    * 获取排序结果    */   public function display() {     return $this->arr;   }   /**    * 初始化    *    * @param  array    * @return bool    */   private function _init($config = array()) {     //参数判断     if ( !is_array($config) OR count($config) == 0) {       if ($this->debug === TRUE) {         $this->_log("sort_init_param_invaild");       }       return FALSE;     }     //初始化成员变量     foreach ($config as $key => $val) {       if ( isset($this->$key)) {         $this->$key = $val;       }     }     //调用相应的成员方法完成排序     $method = $this->sort . $this->marker;     if ( ! method_exists($this, $method)) {       if ($this->debug === TRUE) {         $this->_log("sort_method_invaild");       }       return FALSE;     }     if ( FALSE === ($this->arr = $this->$method($this->arr)))       return FALSE;     return TRUE;   }   /**    * 插入排序    *     * @param  array    * @return bool    */   private function insert_sort($arr) {     //参数判断     if ( ! is_array($arr) OR count($arr) == 0) {       if ($this->debug === TRUE) {         $this->_log("sort_array(insert)_invaild");       }       return FALSE;     }     //具体实现     $count = count($arr);     for ($i = 1; $i < $count; $i++) {       $tmp = $arr[$i];       for($j = $i-1; $j >= 0; $j--) {          if($arr[$j] > $tmp) {           $arr[$j+1] = $arr[$j];           $arr[$j] = $tmp;         }       }     }     return $arr;   }   /**    * 选择排序    *     * @param  array    * @return bool    */   private function select_sort($arr) {     //参数判断     if ( ! is_array($arr) OR count($arr) == 0) {       if ($this->debug === TRUE) {         $this->_log("sort_array(select)_invaild");       }       return FALSE;     }     //具体实现     $count = count($arr);     for ($i = 0; $i < $count-1; $i++) {       $min = $i;       for ($j = $i+1; $j < $count; $j++) {         if ($arr[$min] > $arr[$j]) $min = $j;       }       if ($min != $i) {         $tmp = $arr[$min];         $arr[$min] = $arr[$i];         $arr[$i] = $tmp;       }     }     return $arr;   }   /**    * 冒泡排序    *     * @param  array    * @return bool    */   private function bubble_sort($arr) {     //参数判断     if ( ! is_array($arr) OR count($arr) == 0) {       if ($this->debug === TRUE) {         $this->_log("sort_array(bubble)_invaild");       }       return FALSE;     }     //具体实现     $count = count($arr);     for ($i = 0; $i < $count; $i++) {       for ($j = $count-1; $j > $i; $j--) {         if ($arr[$j] < $arr[$j-1]) {           $tmp = $arr[$j];           $arr[$j] = $arr[$j-1];           $arr[$j-1] = $tmp;         }       }     }     return $arr;     }   /**    * 快速排序    *     * @param  array    * @return bool    */   private function quick_sort($arr) {     //具体实现     if (count($arr) <= 1) return $arr;      $key = $arr[0];     $left_arr = array();     $right_arr = array();     for ($i = 1; $i < count($arr); $i++){       if ($arr[$i] <= $key)         $left_arr[] = $arr[$i];       else         $right_arr[] = $arr[$i];     }     $left_arr = $this->quick_sort($left_arr);     $right_arr = $this->quick_sort($right_arr);        return array_merge($left_arr, array($key), $right_arr);   }   /**    * 日志记录    */   private function _log($msg) {     $msg = 'date[' . date('Y-m-d H:i:s') . '] ' . $msg . '\n';     return @file_put_contents('sort_err.log', $msg, FILE_APPEND);   } } /*End of file sort.php*/ /*Location htdocs/sort.php */

2. sort_demo.php文件如下:

<?php require_once('sort.php'); $config = array (   'arr' => array(23, 22, 41, 18, 20, 12, 200303,2200,1192) ,   //需要排序的数组值   'sort' => 'select',   //可能值: insert, select, bubble, quick   'debug' => TRUE   //可能值: TRUE, FALSE ); $sort = new Sort($config); //var_dump($config['arr']); var_dump($sort->display()); /*End of php*/

看完上述内容,你们对PHP中排序算法有哪些分类有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI