クイックソート: 順序なし配列 $data で、比較値として任意の値を選択し、先頭の検索インデックスとして i、末尾の検索インデックスとして j を定義します。アルゴリズムの手順:
(1) 比較値 $value=$ を初期化します。 data[0], $i=1, $j=count($data)-1
(2) まず端から検索し、$data[$j]が$valueより小さいかどうかを判断し、小さい場合は$ j- -、$value より小さい座標
が見つかるまで検索を続けます (3) この時点で、$data[$i] が $value より大きいかどうかを判断するためにヘッド検索を開始し、そうでない場合は $ i++、$valueより小さい座標が見つかるまで検索を続けます
(4) このとき、$data[$j]と$data[$i]の値は]を相互に交換、つまり$valueより大きい値を右側に、$valueより小さい値を左側に配置します
(5)$になるまで3と4を繰り返します。 i==$j
(6) この時、$valueより大きいものを右側、$valueより小さいものを左側に配置し、真ん中の座標位置が決まりましたは $i、中間の値は $value です。$data[$i] の値を $data[0] の値と交換します。中間の値は $value であるため、$value を中間の座標に移動する必要があります。配列
(7) 配列は左右の 2 つの順序付けされていない配列に分割され、配列の長さが 1 になるまでそれぞれ 1 ~ 6 を再帰的に実行します
ヒント: 中国のクイック ソートの定義は、Baidu でより明確になります。
コード:
<?php header("Content-type: text/html; charset=utf-8"); function quickSort($data, $startIndex, $endIndex){ if($startIndex < $endIndex){ $value = $data[$startIndex]; // 对比值 $startT = $startIndex + 1; $endT = $endIndex; while ($startT != $endT) { // 找到比对比值小的坐标 while ($data[$endT] > $value && $endT > $startT){ $endT--; } // 找到比对比值大的左边 while ($data[$startT] < $value && $startT < $endT){ $startT++; } if($endT > $startT){ $temp =$data[$startT]; $data[$startT] = $data[$endT]; $data[$endT] = $temp; } } // 防止数组已经排序好的情况 if($data[$startT] < $value){ $data[$startIndex] = $data[$startT]; $data[$startT] = $value; } $data = quickSort($data, $startIndex, $startT - 1); $data = quickSort($data, $startT + 1, $endIndex); return $data; }else{ return $data; } } $data = array(10, 5, 30, 22, 1, 42, 14, 34, 8, 13, 28, 36, 7); $data = quickSort($data, 0, count($data) - 1); var_dump($data);
上記では、クイック ソートと PHP コンテンツを含め、PHP でクイック ソートを実装する方法を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。