ホームページ > バックエンド開発 > PHPチュートリアル > PHP はクイックソートを実装します PHP 配列のソート PHP 配列の並べ替え PHP バブルソート計算

PHP はクイックソートを実装します PHP 配列のソート PHP 配列の並べ替え PHP バブルソート計算

WBOY
リリース: 2016-07-29 08:54:57
オリジナル
1003 人が閲覧しました

クイックソート: 順序なし配列 $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 チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート