当前位置:Gxlcms > PHP教程 > php快速排序的算法

php快速排序的算法

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

  1. function qsort(&$arr)
  2. {
  3. _quick_sort($arr, 0, count($arr) - 1);
  4. }
  5. /**
  6. * 采用递归算法的快速排序。
  7. *
  8. * @param array $arr 要排序的数组
  9. * @param int $low 最低的排序子段
  10. * @param int $high 最高的排序字段
  11. */
  12. function _quick_sort(&$arr, $low, $high)
  13. {
  14. $low_data = $arr[$low];
  15. $prev_low = $low;
  16. $prev_high = $high;
  17. while ($low < $high)
  18. {
  19. while ($arr[$high] >= $low_data && $low < $high) {
  20. $high--;
  21. }
  22. if ($low < $high) {
  23. $arr[$low] = $arr[$high];
  24. $low++;
  25. }
  26. while ($arr[$low] <= $low_data && $low < $high) {
  27. $low++;
  28. }
  29. if ($low < $high) {
  30. $arr[$high] = $arr[$low];
  31. $high--;
  32. }
  33. }
  34. $arr[$low] = $low_data;
  35. if ($prev_low < $low) {
  36. _quick_sort($arr, $prev_low, $low);
  37. }
  38. if ($low + 1 < $prev_high) {
  39. _quick_sort($arr, $low + 1, $prev_high);
  40. }
  41. }
  42. function quick_sort(&$arr)
  43. {
  44. $stack = array();
  45. array_push($stack, 0);
  46. array_push($stack, count($arr) -1);
  47. while (!empty($stack)) {
  48. $high = array_pop($stack);
  49. $low = array_pop($stack);
  50. $low_data = $arr[$low];
  51. $prev_low = $low;
  52. $prev_high = $high;
  53. while ($low < $high)
  54. {
  55. while ($arr[$high] >= $low_data && $low < $high) {
  56. $high--;
  57. }
  58. if ($low < $high) {
  59. $arr[$low] = $arr[$high];
  60. $low++;
  61. }
  62. while ($arr[$low] <= $low_data && $low < $high) {
  63. $low++;
  64. }
  65. if ($low < $high) {
  66. $arr[$high] = $arr[$low];
  67. $high--;
  68. }
  69. }
  70. $arr[$low] = $low_data;
  71. if ($prev_low < $low) {
  72. array_push($stack, $prev_low);
  73. array_push($stack, $low);
  74. }
  75. if ($low + 1 < $prev_high) {
  76. array_push($stack, $low + 1);
  77. array_push($stack, $prev_high);
  78. }
  79. }
  80. }

php

人气教程排行