이 기사의 예에서는 PHP 정렬 알고리즘 클래스를 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 내용은 다음과 같습니다.
4가지 정렬 알고리즘의 PHP 구현:
1) 삽입 정렬의 기본 아이디어는 다음과 같습니다.
모든 레코드가 삽입될 때까지 정렬할 레코드가 키 크기에 따라 이전에 정렬된 하위 파일의 적절한 위치에 삽입될 때마다.
2) 선택 정렬의 기본 아이디어는 다음과 같습니다.
각 단계에서 정렬할 레코드 중에서 가장 작은 키워드가 있는 레코드가 선택되고 모든 레코드가 정렬될 때까지 정렬된 하위 파일의 끝에 배치됩니다.
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 프로그래밍 설계에 도움이 되기를 바랍니다.