欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP各种排序算法的实现汇总

程序员文章站 2022-04-22 12:49:10
...
  1. // 冒泡排序

  2. function BubbleSort($arr) {
  3. // 获得数组总长度
  4. $num = count($arr);
  5. // 正向遍历数组
  6. for ($i = 1; $i // 反向遍历
  7. for ($j = $num - 1; $j >= $i ; $j--) {
  8. // 相邻两个数比较
  9. if ($arr[$j] // 暂存较小的数
  10. $iTemp = $arr[$j-1];
  11. // 把较大的放前面
  12. $arr[$j-1] = $arr[$j];
  13. // 较小的放后面
  14. $arr[$j] = $iTemp;
  15. }
  16. }
  17. }
  18. return $arr;
  19. }
  20. // 交换法排序

  21. function ExchangeSort($arr){
  22. $num = count($arr);
  23. // 遍历数组
  24. for ($i = 0;$i // 获得当前索引的下一个索引
  25. for ($j = $i + 1; $j // 比较相邻两个的值大小
  26. if ($arr[$j] // 暂存较小的数
  27. $iTemp = $arr[$i];
  28. // 把较大的放前面
  29. $arr[$i] = $arr[$j];
  30. // 较小的放后面
  31. $arr[$j] = $iTemp;
  32. }
  33. }
  34. } // bbs.it-home.org
  35. return $arr;
  36. }
  37. // 选择法排序

  38. function SelectSort($arr) {
  39. // 获得数组总长度
  40. $num = count($arr);
  41. // 遍历数组
  42. for ($i = 0;$i // 暂存当前值
  43. $iTemp = $arr[$i];
  44. // 暂存当前位置
  45. $iPos = $i;
  46. // 遍历当前位置以后的数据
  47. for ($j = $i + 1;$j // 如果有小于当前值的
  48. if ($arr[$j] // 暂存最小值
  49. $iTemp = $arr[$j];
  50. // 暂存位置
  51. $iPos = $j;
  52. }
  53. }
  54. // 把当前值放到算好的位置
  55. $arr[$iPos] = $arr[$i];
  56. // 把当前值换成算好的值
  57. $arr[$i] = $iTemp;
  58. }
  59. return $arr;
  60. }
  61. // 插入法排序

  62. function InsertSort($arr){
  63. $num = count($arr);
  64. // 遍历数组
  65. for ($i = 1;$i // 获得当前值
  66. $iTemp = $arr[$i];
  67. // 获得当前值的前一个位置
  68. $iPos = $i - 1;
  69. // 如果当前值小于前一个值切未到数组开始位置
  70. while (($iPos >= 0) && ($iTemp // 把前一个的值往后放一位
  71. $arr[$iPos + 1] = $arr[$iPos];
  72. // 位置递减
  73. $iPos--;
  74. }
  75. $arr[$iPos+1] = $iTemp;
  76. }
  77. return $arr;
  78. }
  79. // 快速排序

  80. function QuickSort($arr){
  81. $num = count($arr);
  82. $l = $r = 0;
  83. // 从索引的第二个开始遍历数组
  84. for ($i = 1;$i // 如果值小于索引1
  85. if ($arr[$i] // 装入左索引数组(小于索引1的数据)
  86. $left[] = $arr[$i];
  87. $l++;
  88. } else { // bbs.it-home.org
  89. // 否则装入右索引中(大于索引1的数据)
  90. $right[] = $arr[$i];
  91. $r++; //
  92. }
  93. }
  94. // 如果左索引有值 则对左索引排序
  95. if($l > 1) {
  96. $left = QuickSort($left);
  97. }
  98. // 排序后的数组
  99. $new_arr = $left;
  100. // 将当前数组第一个放到最后
  101. $new_arr[] = $arr[0];
  102. // 如果又索引有值 则对右索引排序
  103. if ($r > 1) {
  104. $right = QuickSort($right);
  105. }
  106. // 根据右索引的长度再次增加数据
  107. for($i = 0;$i $new_arr[] = $right[$i];
  108. }
  109. return $new_arr;
  110. }
  111. ?>
复制代码