当前位置:Gxlcms > PHP教程 > PHP常用排序算法实例详解

PHP常用排序算法实例详解

时间:2021-07-01 10:21:17 帮助过:9人阅读

这篇文章主要介绍了PHP常用排序算法,结合实例形式总结分析了php常见的排序算法,包括基本排序、冒泡排序、快速排序、插入排序等,需要的朋友可以参考下

php三种基础算法:冒泡,插入和快速排序法

  1. $array = array(2,3,5,6,9,8,1);
  2. //冒泡排序思想,前后元素比较
  3. function sort_bulldle($array){
  4. $num = count($array);
  5. for($i=0; $i<$num; $i++){
  6. $tmp = $array[$i];
  7. for ($j=$i-1; $j>=0; $j--) {
  8. if ($tmp < $array[$j]) {
  9. $arr[$j+1] = $arr[$j];
  10. $arr[$j] = $tmp;
  11. } else {
  12. break;
  13. }
  14. }
  15. }
  16. return $array;
  17. }
  18. //插入排序思想,就是从第二个元素开始,到最后一个元素都是这个需要排序的元素
  19. function sort_bulldle($arr){
  20. for($i=1, $len=count($arr); $i<$len; $i++) {
  21. $tmp = $arr[$i];
  22. for($j=$i-1;$j>=0;$j--) {
  23. if($tmp < $arr[$j]) {
  24. $arr[$j+1] = $arr[$j];
  25. $arr[$j] = $tmp;
  26. } else {
  27. break;
  28. }
  29. }
  30. }
  31. return $arr;
  32. }
  33. //快速排序,找一个基准点把数组分成两组比较
  34. function sort_bulldle($array){
  35. $num = count($array);
  36. if($num<=1) {
  37. return $array;
  38. }
  39. $base_num = $array[0];
  40. $left_array = array();
  41. $right_array = array();
  42. for($i=1; $i<$num; $i++) {
  43. if ($base_num > $array[$i]) {
  44. $left_array[] = $array[$i];
  45. }else
  46. {
  47. $right_array[] = $array[$i];
  48. }
  49. }
  50. $left_array = sort_bulldle($left_array);
  51. $right_array = sort_bulldle($right_array);
  52. return array_merge($left_array, array($base_num), $right_array);
  53. }

本文实例总结了PHP常用排序算法。分享给大家供大家参考,具体如下:

  1. class bevin{
  2. public $public = 'public';
  3. private $private = 'private';
  4. protected $protected = 'protected';
  5. //final $final = 'final';
  6. static $static = 'static';
  7. function __construct(){
  8. $this->protected = 'change private';
  9. }
  10. public function setValue($a){
  11. self::$static = $a;
  12. }
  13. public function getValue(){
  14. echo $this->private;
  15. }
  16. function __destruct(){
  17. echo 'asdfsadf';
  18. }
  19. }
  20. class paixu {
  21. // 基本排序
  22. public function t_sortArray($array) {
  23. if(is_array($array) && count($array)>1) {
  24. for($i=0; $i<count($array); $i++) {
  25. for($j=($i+1); $j<count($array); $j++) {
  26. $temp = $array[$i];
  27. if($array[$j]<$array[$i]) {
  28. $array[$i] = $array[$j];
  29. $array[$j] = $temp;
  30. }
  31. }
  32. }
  33. return $array;
  34. } else {
  35. return $array;
  36. }
  37. }
  38. // 冒泡排序
  39. public function c_sortArray($array) {
  40. if(!is_array($array) || count($array)<=1){ return $array; }
  41. $status = false;
  42. foreach($array as $key=>$v) {
  43. if($key>0) {
  44. if($array[$key-1]>$array[$key]) {
  45. $array[$key] = $array[$key-1];
  46. $array[$key-1] = $v;
  47. $status = true;
  48. }
  49. }
  50. }
  51. if($status) {
  52. return $this->c_sortArray($array);
  53. } else {
  54. return $array;
  55. }
  56. }
  57. // 快速排序
  58. public function v_sortArray($array) {
  59. if(!is_array($array) || count($array)<=1){ return $array; }
  60. if(count($array)>2) {
  61. $m = $array[floor(count($array)/2)+1];
  62. } else {
  63. if($array[0]>$array[1]) {
  64. $temp = $array[0];
  65. $array[0] = $array[1];
  66. $array[1] = $temp;
  67. }
  68. return $array;
  69. }
  70. $leftarray = array();
  71. $rightarray = array();
  72. foreach($array as $key=>$v) {
  73. if($v>$m) {
  74. $rightarray[] = $v;
  75. }
  76. if($v<$m) {
  77. $leftarray[] = $v;
  78. }
  79. if($v==$m) {
  80. $mid[] = $v;
  81. }
  82. }
  83. $nleftarray = $this->v_sortArray($leftarray);
  84. $nrightarray = $this->v_sortArray($rightarray);
  85. return array_merge($nleftarray,$mid,$nrightarray);
  86. }
  87. // 直接插入排序
  88. public function i_sortArray($array) {
  89. if(!is_array($array) || count($array)<=1){ return $array; }
  90. $newarray = array($array[0]);
  91. $temp = 0;
  92. foreach($array as $k=>$v) {
  93. if($k>0) {
  94. if($v>=$newarray[count($newarray)-1]) {
  95. $newarray[] = $v;
  96. } else {
  97. foreach($newarray as $nk=>$nv) {
  98. if($v<$nv) {
  99. $temparray = array();
  100. foreach($newarray as $ck=>$cv) {
  101. if($ck<$nk) {
  102. $temparray[$ck] = $cv;
  103. } elseif($ck==$nk) {
  104. $temparray[$ck] = $v;
  105. $temparray[($ck+1)] = $cv;
  106. } else {
  107. $temparray[($ck+1)] = $cv;
  108. }
  109. }
  110. $newarray = $temparray;
  111. break;
  112. }
  113. }
  114. }
  115. }
  116. }
  117. return $newarray;
  118. }
  119. }
  120. $bevin = new paixu;
  121. $array = array(5,4,5,4,4,5,5,5,5,5);
  122. $v = $bevin->t_sortArray($array);
  123. print_r($v);
  124. $v = $bevin->c_sortArray($array);
  125. print_r($v);
  126. $v = $bevin->v_sortArray($array);
  127. print_r($v);
  128. $v = $bevin->i_sortArray($array);
  129. print_r($v);

运行结果:

  1. Array
  2. (
  3. [0] => 4
  4. [1] => 4
  5. [2] => 4
  6. [3] => 5
  7. [4] => 5
  8. [5] => 5
  9. [6] => 5
  10. [7] => 5
  11. [8] => 5
  12. [9] => 5
  13. )
  14. Array
  15. (
  16. [0] => 4
  17. [1] => 4
  18. [2] => 4
  19. [3] => 5
  20. [4] => 5
  21. [5] => 5
  22. [6] => 5
  23. [7] => 5
  24. [8] => 5
  25. [9] => 5
  26. )
  27. Array
  28. (
  29. [0] => 4
  30. [1] => 4
  31. [2] => 4
  32. [3] => 5
  33. [4] => 5
  34. [5] => 5
  35. [6] => 5
  36. [7] => 5
  37. [8] => 5
  38. [9] => 5
  39. )
  40. Array
  41. (
  42. [0] => 4
  43. [1] => 4
  44. [2] => 4
  45. [3] => 5
  46. [4] => 5
  47. [5] => 5
  48. [6] => 5
  49. [7] => 5
  50. [8] => 5
  51. [9] => 5
  52. )

以上就是本文的全部内容,希望对大家的学习有所帮助。


相关推荐:

PHP实现桶排序算法

PHP排序算法系列之归并排序详解

PHP实现多维数组排序算法有哪些方式

以上就是PHP常用排序算法实例详解的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行