PHP各種排序演算法的實作總結

WBOY
發布: 2016-07-25 08:55:46
原創
863 人瀏覽過
  1. // 冒泡排序

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

  22. // 交换法排序

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

  42. // 选择法排序

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

  69. // 插入法排序

  70. function InsertSort($arr){
  71. $num = count($arr);
  72. // 遍历数组
  73. for ($i = 1;$i < $num; $i++) {
  74. // 获得当前值
  75. $iTemp = $arr[$i];
  76. // 获得当前值的前一个位置
  77. $iPos = $i - 1;
  78. // 如果当前值小于前一个值切未到数组开始位置
  79. while (($iPos >= 0) && ($iTemp < $arr[$iPos])) {
  80. // 把前一个的值往后放一位
  81. $arr[$iPos + 1] = $arr[$iPos];
  82. // 位置递减
  83. $iPos--;
  84. }
  85. $arr[$iPos+1] = $iTemp;
  86. }
  87. return $arr;
  88. }

  89. // 快速排序

  90. function QuickSort($arr){
  91. $num = count($arr);
  92. $l = $r = 0;
  93. // 从索引的第二个开始遍历数组
  94. for ($i = 1;$i < $num; $i++) {
  95. // 如果值小于索引1
  96. if ($arr[$i] < $arr[0]) {
  97. // 装入左索引数组(小于索引1的数据)
  98. $left[] = $arr[$i];
  99. $l++;
  100. } else { // bbs.it-home.org
  101. // 否则装入右索引中(大于索引1的数据)
  102. $right[] = $arr[$i];
  103. $r++; //
  104. }
  105. }
  106. // 如果左索引有值 则对左索引排序
  107. if($l > 1) {
  108. $left = QuickSort($left);
  109. }
  110. // 排序后的数组
  111. $new_arr = $left;
  112. // 将当前数组第一个放到最后
  113. $new_arr[] = $arr[0];
  114. // 如果又索引有值 则对右索引排序
  115. if ($r > 1) {
  116. $right = QuickSort($right);
  117. }
  118. // 根据右索引的长度再次增加数据
  119. for($i = 0;$i < $r; $i++) {
  120. $new_arr[] = $right[$i];
  121. }
  122. return $new_arr;
  123. }
  124. ?>

复制代码


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!