PHP各種排序演算法的實現匯總

來源:互聯網
上載者:User
  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. ?>

複製代碼
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.