ホームページ >バックエンド開発 >PHPチュートリアル >PHP 連想配列ソート (クイックソート)_PHP チュートリアル
使用環境と条件
PHP の連想配列に次の配列データがある状況があります:
[php]
$array = 配列 (
配列 (
'名前' => "シャオ"、
「年齢」 => 3
)、
配列 (
'名前' => '王'、
「年齢」 => 1
)、
配列 (
'名前' => 'チェン'、
「年齢」 => 2
)
);
PHP の組み込み関数では、age フィールドに対して配列をソートする必要がありますが、どのような種類のソートであっても、明らかにニーズを満たすことができないため、要件をすばやく達成するために自分で簡単なソート コードを作成できます
PHP にはポインターがないため、参照渡しする場合は、C コードのようにクイックソート (int *A、int begin、int end) を直接記述することはできず、代わりに PHP の & 演算子 Pass を使用する必要があります。配列のアドレスをクイックソート関数に渡すことで、php
で値ではなく参照によって渡すことができますクイックソートコード
[php]
/**
* 説明: クイックソートでピボットポイントの位置を取得します
*/
function QuickPartition(&$array, $left, $right) {
// 1. ベースライン定義
$stand = $array [$left];
// 2. $left == $right まで区間の両端から中間までスキャンします
While ( $left
while ( $left < $right && $array [$right] ['age'] >= $stand ['age'] ) {
$right --;
}
If ($left
$array [$left ++] = $array [$right]
}
While ( $left < $right && $array [$left] ['age'] <= $stand ['age'] ) {
$left ++;
}
If ($left
$array [$right --] = $array [$left];
}
}
// 3. ピボットポイントの位置を取得します
$array [$left] = $stand
$left を返します。
}
/**
* 説明: クイックソートメイン処理関数
*/
function QuickSortProcess(&$array, $begin, $end) {
// 1. 変数の定義
$pivot = NULL // ピボットポイント
;
If ($begin < $end) {
$pivot = QuickPartition ( $array, $begin, $end );
QuickSortProcess ( $array, $begin, $pivot - 1 );
QuickSortProcess ( $array, $pivot + 1, $end );
}
}
このクイック ソートを自分のプロジェクトで使用しましたが、とても満足しました。10 月 1 日の休暇中に AC クイック ソートの C コードに N 日間費やしたことは無駄ではありませんでした。