ホームページ >バックエンド開発 >PHPチュートリアル >PHPクイックソートアルゴリズム

PHPクイックソートアルゴリズム

WBOY
WBOYオリジナル
2016-07-25 08:43:061018ブラウズ
  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 array_push($stack, $low + 1) );
  76. array_push($stack, $prev_high);
  77. }
  78. }
  79. }
复制代

php


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。