<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            php語言

            PHP排序算法類講解

            時間:2025-02-10 03:44:37 php語言 我要投稿
            • 相關推薦

            PHP排序算法類講解

              越來越多的公司喜歡在PHP程序員的筆試題中增加排序算法部分,以此來印證PHP程序的計算機基礎。大家知道PHP排序算法類嗎?下面我們就給大家詳細介紹一下吧!

              四種排序算法的PHP實現:

              1) 插入排序(Insertion Sort)的基本思想是:

              每次將一個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子文件中的適當位置,直到全部記錄插入完成為止。

              2) 選擇排序(Selection Sort)的基本思想是:

              每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子文件的最后,直到全部記錄排序完畢。

              3) 冒泡排序的基本思想是:

              兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。

              4) 快速排序實質上和冒泡排序一樣,都是屬于交換排序的一種應用。所以基本思想和上面的冒泡排序是一樣的。

              1. sort.php文件如下:

              179

              /**

              *

              * @author quanshuidingdang

              */

              class Sort {

              private $arr = array();

              private $sort = '';

              private $marker = '_sort';

              private $debug = TRUE;

              /**

              * 構造函數

              *

              * @param array 例如:

              $config = array (

              'arr' => array(22,3,41,18) , //需要排序的數組值

              'sort' => '', //可能值: , 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 _sort($arr) {

              //參數判斷

              if ( ! is_array($arr) OR count($arr) == 0) {

              if ($this->debug === TRUE) {

              $this->_log("sort_array()_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文件如下:

              14

              require_once('sort.php');

              $config = array (

              'arr' => array(23, 22, 41, 18, 20, 12, 200303,2200,1192) ,

              //需要排序的數組值

              'sort' => 'select',

              //可能值: , select, bubble, quick

              'debug' => TRUE

              //可能值: TRUE, FALSE

              );

              $sort = new Sort($config);

              //var_dump($config['arr']);

              var_dump($sort->display());

              /*End of php*/

            【PHP排序算法類講解】相關文章:

            PHP快速排序算法解析04-01

            PHP 快速排序算法解析06-11

            PHP快速排序算法詳解01-26

            PHP四種基本排序算法03-03

            Java排序算法06-17

            php經典算法介紹02-26

            PHP經典算法題03-19

            PHP紅包算法04-06

            PHP類和對象的相關函數講解07-10

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看