Home  >  Article  >  Backend Development  >  Detailed explanation of several sorting algorithm examples in PHP

Detailed explanation of several sorting algorithm examples in PHP

伊谢尔伦
伊谢尔伦Original
2017-06-23 14:26:131472browse

PHP implementation of four sorting algorithms:

1) The basic idea of ​​insertion sort (Insertion Sort) is:
Each time a record to be sorted is sorted according to its The keyword size is inserted into the appropriate position in the previously sorted sub-file until all records are inserted.

2) The basic idea of ​​Selection Sort is: In each pass, the record with the smallest keyword is selected from the records to be sorted, and the order is placed in the sorted record. At the end of the sorted sub-file, until all records are sorted.

3)

The basic idea of ​​bubble sorting is: Compare the keywords of the records to be sorted pairwise. If it is found that the order of the two records is opposite, the exchange will be carried out until there is no inversion. until the sequence is recorded.

4) Quick sort is essentially the same as bubble sort, and is an application of exchange sort. So the basic idea is the same as the bubble sort above.

1. The sort.php file is as follows:

<?php
class Sort {
  private $arr  = array(); 
  private $sort  = &#39;insert&#39;;
  private $marker = &#39;_sort&#39;;
  private $debug = TRUE;
  /**
   * 构造函数
   *
   * @param  array  例如:
   $config = array (
   &#39;arr&#39; => array(22,3,41,18) , //需要排序的数组值
   &#39;sort&#39; => &#39;insert&#39;, //可能值: insert, select, bubble, quick
   &#39;debug&#39; => 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 = &#39;date[&#39; . date(&#39;Y-m-d H:i:s&#39;) . &#39;] &#39; . $msg . &#39;\n&#39;;
    return @file_put_contents(&#39;sort_err.log&#39;, $msg, FILE_APPEND);
  }
}
/*End of file sort.php*/
/*Location htdocs/sort.php */

2. The sort_demo.php file is as follows:

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

The above is the detailed content of Detailed explanation of several sorting algorithm examples in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:what is php buffer?Next article:what is php buffer?