Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP各种排序算法的实现汇总

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

WBOY
WBOYasal
2016-07-25 08:55:46878semak imbas
  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. ?>
复制代码


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn