快速排序的算法php實現

6e72 9年前發布 | 3K 次閱讀 PHP

function qsort(&$arr)
{
    _quick_sort($arr, 0, count($arr) - 1);
}

/**

  • 采用遞歸算法的快速排序。 *
  • @param array $arr 要排序的數組
  • @param int $low 最低的排序子段
  • @param int $high 最高的排序字段 */ function _quick_sort(&$arr, $low, $high) { $low_data = $arr[$low]; $prev_low = $low; $prev_high = $high; while ($low < $high) {
         while ($arr[$high] >= $low_data && $low < $high) {
             $high--;
         }
         if ($low < $high) {
             $arr[$low] = $arr[$high];
             $low++;
         }
         while ($arr[$low] <= $low_data && $low < $high) {
             $low++;
         }
         if ($low < $high) {
             $arr[$high] = $arr[$low];
             $high--;
         }
    
    } $arr[$low] = $low_data; if ($prev_low < $low) {
      _quick_sort($arr, $prev_low, $low);
    
    } if ($low + 1 < $prev_high) {
      _quick_sort($arr, $low + 1, $prev_high);
    
    } }

function quick_sort(&$arr) { $stack = array(); array_push($stack, 0); array_push($stack, count($arr) -1); while (!empty($stack)) { $high = array_pop($stack); $low = array_pop($stack); $low_data = $arr[$low]; $prev_low = $low; $prev_high = $high; while ($low < $high) { while ($arr[$high] >= $low_data && $low < $high) { $high--; } if ($low < $high) { $arr[$low] = $arr[$high]; $low++; } while ($arr[$low] <= $low_data && $low < $high) { $low++; } if ($low < $high) { $arr[$high] = $arr[$low]; $high--; } } $arr[$low] = $low_data; if ($prev_low < $low) { array_push($stack, $prev_low); array_push($stack, $low); } if ($low + 1 < $prev_high) { array_push($stack, $low + 1); array_push($stack, $prev_high); } } }</pre>

 本文由用戶 6e72 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!