首页 > 开发 > 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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表