国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP排序算法類實例

2024-05-04 23:36:20
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了PHP排序算法類,實例分析了插入排序、選擇排序、冒泡排序、快速排序等排序算法的原理與實現技巧,需要的朋友可以參考下

本文實例講述了PHP排序算法類。分享給大家供大家參考。具體如下:

四種排序算法的PHP實現:

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

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

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

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

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

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

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

1. sort.php文件如下:

 

 
  1. ?<?php 
  2. /** 
  3.  
  4. * @author quanshuidingdang 
  5. */ 
  6. class Sort { 
  7. private $arr = array();  
  8. private $sort = 'insert'
  9. private $marker = '_sort'
  10. private $debug = TRUE; 
  11. /** 
  12. * 構造函數 
  13. * 
  14. * @param array 例如: 
  15. $config = array ( 
  16. 'arr' => array(22,3,41,18) , //需要排序的數組值 
  17. 'sort' => 'insert', //可能值: insert, select, bubble, quick 
  18. 'debug' => TRUE //可能值: TRUE, FALSE 
  19. ) 
  20. */ 
  21. public function __construct($config = array()) { 
  22. if ( count($config) > 0) { 
  23. $this->_init($config); 
  24. /** 
  25. * 獲取排序結果 
  26. */ 
  27. public function display() { 
  28. return $this->arr; 
  29. /** 
  30. * 初始化 
  31. * 
  32. * @param array 
  33. * @return bool 
  34. */ 
  35. private function _init($config = array()) { 
  36. //參數判斷 
  37. if ( !is_array($config) OR count($config) == 0) { 
  38. if ($this->debug === TRUE) { 
  39. $this->_log("sort_init_param_invaild"); 
  40. return FALSE; 
  41. //初始化成員變量 
  42. foreach ($config as $key => $val) { 
  43. if ( isset($this->$key)) { 
  44. $this->$key = $val
  45. //調用相應的成員方法完成排序 
  46. $method = $this->sort . $this->marker; 
  47. if ( ! method_exists($this$method)) { 
  48. if ($this->debug === TRUE) { 
  49. $this->_log("sort_method_invaild"); 
  50. return FALSE; 
  51. if ( FALSE === ($this->arr = $this->$method($this->arr))) 
  52. return FALSE; 
  53. return TRUE; 
  54. /** 
  55. * 插入排序 
  56.  
  57. * @param array 
  58. * @return bool 
  59. */ 
  60. private function insert_sort($arr) { 
  61. //參數判斷 
  62. if ( ! is_array($arr) OR count($arr) == 0) { 
  63. if ($this->debug === TRUE) { 
  64. $this->_log("sort_array(insert)_invaild"); 
  65. return FALSE; 
  66. //具體實現 
  67. $count = count($arr); 
  68. for ($i = 1; $i < $count$i++) { 
  69. $tmp = $arr[$i]; 
  70. for($j = $i-1; $j >= 0; $j--) {  
  71. if($arr[$j] > $tmp) { 
  72. $arr[$j+1] = $arr[$j]; 
  73. $arr[$j] = $tmp
  74. return $arr
  75. /** 
  76. * 選擇排序 
  77.  
  78. * @param array 
  79. * @return bool 
  80. */ 
  81. private function select_sort($arr) { 
  82. //參數判斷 
  83. if ( ! is_array($arr) OR count($arr) == 0) { 
  84. if ($this->debug === TRUE) { 
  85. $this->_log("sort_array(select)_invaild"); 
  86. return FALSE; 
  87. //具體實現 
  88. $count = count($arr); 
  89. for ($i = 0; $i < $count-1; $i++) { 
  90. $min = $i
  91. for ($j = $i+1; $j < $count$j++) { 
  92. if ($arr[$min] > $arr[$j]) $min = $j
  93. if ($min != $i) { 
  94. $tmp = $arr[$min]; 
  95. $arr[$min] = $arr[$i]; 
  96. $arr[$i] = $tmp
  97. return $arr
  98. /** 
  99. * 冒泡排序 
  100.  
  101. * @param array 
  102. * @return bool 
  103. */ 
  104. private function bubble_sort($arr) { 
  105. //參數判斷 
  106. if ( ! is_array($arr) OR count($arr) == 0) { 
  107. if ($this->debug === TRUE) { 
  108. $this->_log("sort_array(bubble)_invaild"); 
  109. return FALSE; 
  110. //具體實現 
  111. $count = count($arr); 
  112. for ($i = 0; $i < $count$i++) { 
  113. for ($j = $count-1; $j > $i$j--) { 
  114. if ($arr[$j] < $arr[$j-1]) { 
  115. $tmp = $arr[$j]; 
  116. $arr[$j] = $arr[$j-1]; 
  117. $arr[$j-1] = $tmp
  118. return $arr;  
  119. /** 
  120. * 快速排序 
  121.  
  122. * @param array 
  123. * @return bool 
  124. */ 
  125. private function quick_sort($arr) { 
  126. //具體實現 
  127. if (count($arr) <= 1) return $arr;  
  128. $key = $arr[0]; 
  129. $left_arr = array(); 
  130. $right_arr = array(); 
  131. for ($i = 1; $i < count($arr); $i++){ 
  132. if ($arr[$i] <= $key
  133. $left_arr[] = $arr[$i]; 
  134. else 
  135. $right_arr[] = $arr[$i]; 
  136. $left_arr = $this->quick_sort($left_arr); 
  137. $right_arr = $this->quick_sort($right_arr);  
  138.  
  139. return array_merge($left_arrarray($key), $right_arr); 
  140. /** 
  141. * 日志記錄 
  142. */ 
  143. private function _log($msg) { 
  144. $msg = 'date[' . date('Y-m-d H:i:s') . '] ' . $msg . '/n'
  145. return @file_put_contents('sort_err.log'$msg, FILE_APPEND); 
  146. /*End of file sort.php*/ 
  147. /*Location htdocs/sort.php */ 

2. sort_demo.php文件如下:

 

 
  1. ?<?php 
  2. require_once('sort.php'); 
  3. $config = array ( 
  4. 'arr' => array(23, 22, 41, 18, 20, 12, 200303,2200,1192) , 
  5. //需要排序的數組值 
  6. 'sort' => 'select'
  7. //可能值: insert, select, bubble, quick 
  8. 'debug' => TRUE 
  9. //可能值: TRUE, FALSE 
  10. ); 
  11. $sort = new Sort($config); 
  12. //var_dump($config['arr']); 
  13. var_dump($sort->display()); 
  14. /*End of php*/ 

希望本文所述對大家的php程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河西区| 胶南市| 调兵山市| 郎溪县| 高陵县| 聂荣县| 克拉玛依市| 郯城县| 安平县| 鹤庆县| 方山县| 琼海市| 静乐县| 驻马店市| 罗城| 安庆市| 汉源县| 彝良县| 垦利县| 云霄县| 南阳市| 五台县| 青川县| 兖州市| 东宁县| 海南省| 武威市| 宜宾县| 罗定市| 晋中市| 淮阳县| 建德市| 绥宁县| 奇台县| 牡丹江市| 翁牛特旗| 银川市| 庆安县| 南阳市| 昌宁县| 新竹市|