当前位置:Gxlcms > PHP教程 > PHP排序算法(安插,选择,交换,冒泡,快速)

PHP排序算法(安插,选择,交换,冒泡,快速)

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

PHP排序算法(插入,选择,交换,冒泡,快速)
  1. <!--?php
  2. //冒泡排序
  3. function BubbleSort($arr) {
  4. // 获得数组总长度
  5. $num = count($arr);
  6. // 正向遍历数组
  7. for ($i = 1; $i < $num; $i++) {
  8. // 反向遍历
  9. for ($j = $num - 1; $j -->= $i ; $j--) {
  10. // 相邻两个数比较
  11. if ($arr[$j] < $arr[$j-1]) {
  12. // 暂存较小的数
  13. $iTemp = $arr[$j-1];
  14. // 把较大的放前面
  15. $arr[$j-1] = $arr[$j];
  16. // 较小的放后面
  17. $arr[$j] = $iTemp;
  18. }
  19. }
  20. }
  21. return $arr;
  22. }
  23. // 交换法排序
  24. function ExchangeSort($arr){
  25. $num = count($arr);
  26. // 遍历数组
  27. for ($i = 0;$i < $num - 1; $i++) {
  28. // 获得当前索引的下一个索引
  29. for ($j = $i + 1; $j < $num; $j++) {
  30. // 比较相邻两个的值大小
  31. if ($arr[$j] < $arr[$i]) {
  32. // 暂存较小的数
  33. $iTemp = $arr[$i];
  34. // 把较大的放前面
  35. $arr[$i] = $arr[$j];
  36. // 较小的放后面
  37. $arr[$j] = $iTemp;
  38. }
  39. }
  40. }
  41. return $arr;
  42. }
  43. // 选择法排序
  44. function SelectSort($arr) {
  45. // 获得数组总长度
  46. $num = count($arr);
  47. // 遍历数组
  48. for ($i = 0;$i < $num-1; $i++) {
  49. // 暂存当前值
  50. $iTemp = $arr[$i];
  51. // 暂存当前位置
  52. $iPos = $i;
  53. // 遍历当前位置以后的数据
  54. for ($j = $i + 1;$j < $num; $j++){
  55. // 如果有小于当前值的
  56. if ($arr[$j] < $iTemp) {
  57. // 暂存最小值
  58. $iTemp = $arr[$j];
  59. // 暂存位置
  60. $iPos = $j;
  61. }
  62. }
  63. // 把当前值放到算好的位置
  64. $arr[$iPos] = $arr[$i];
  65. // 把当前值换成算好的值
  66. $arr[$i] = $iTemp;
  67. }
  68. return $arr;
  69. }
  70. // 插入法排序
  71. function InsertSort($arr){
  72. $num = count($arr);
  73. // 遍历数组
  74. for ($i = 1;$i < $num; $i++) {
  75. // 获得当前值
  76. $iTemp = $arr[$i];
  77. // 获得当前值的前一个位置
  78. $iPos = $i - 1;
  79. // 如果当前值小于前一个值切未到数组开始位置
  80. while (($iPos >= 0) && ($iTemp < $arr[$iPos])) {
  81. // 把前一个的值往后放一位
  82. $arr[$iPos + 1] = $arr[$iPos];
  83. // 位置递减
  84. $iPos--;
  85. }
  86. $arr[$iPos+1] = $iTemp;
  87. }
  88. return $arr;
  89. }
  90. // 快速排序
  91. function QuickSort($arr){
  92. $num = count($arr);
  93. $l = $r = 0;
  94. $left = $right = array();
  95. // 从索引的第二个开始遍历数组
  96. for ($i = 1;$i < $num; $i++) {
  97. // 如果值小于索引1
  98. if ($arr[$i] < $arr[0]) {
  99. // 装入左索引数组(小于索引1的数据)
  100. $left[] = $arr[$i];
  101. $l++;
  102. } else {
  103. // 否则装入右索引中(大于索引1的数据)
  104. $right[] = $arr[$i];
  105. $r++; //
  106. }
  107. }
  108. // 如果左索引有值 则对左索引排序
  109. if($l > 1) {
  110. $left = QuickSort($left);
  111. }
  112. // 排序后的数组
  113. $new_arr = $left;
  114. // 将当前数组第一个放到最后
  115. $new_arr[] = $arr[0];
  116. // 如果又索引有值 则对右索引排序
  117. if ($r > 1) {
  118. $right = QuickSort($right);
  119. }
  120. // 根据右索引的长度再次增加数据
  121. for($i = 0;$i < $r; $i++) {
  122. $new_arr[] = $right[$i];
  123. }
  124. return $new_arr;
  125. }
  126. ?>

人气教程排行