PHP 連想配列ソート (クイックソート)
最近、クイック ソートを使ってさまざまなテストを行ってきたことを認めます。今回は、PHP を使用してクイック ソートを実装します。実際のニーズ。
PHP の連想配列に次の配列データがある状況があります:
$array = array ( array ( 'name' => "xiao", 'age' => 3 ), array ( 'name' => 'wang', 'age' => 1 ), array ( 'name' => 'chen', 'age' => 2 ) );
PHP にはポインタがないので、参照渡ししたい場合は、C コードのようにクイックソート (int *A, int begin, int end) を直接書くことはできませんが、PHP の & 演算子を使用して、次のアドレスを渡します。配列をクイックソート関数に渡すことで、値を渡す代わりに参照を渡すことが PHP で実現できます
QuickSortProcess ( $array, 0, count ( $array ) - 1 ); print_r ( $array ); /** * Description:快速排序中获取中枢点的位置 */ function QuickPartition(&$array, $left, $right) { // 1.基准定义 $stand = $array [$left]; // 2.从区间两端向中间扫描,直到$left == $right为止 while ( $left < $right ) { while ( $left < $right && $array [$right] ['age'] >= $stand ['age'] ) { $right --; } if ($left < $right) { $array [$left ++] = $array [$right]; } while ( $left < $right && $array [$left] ['age'] <= $stand ['age'] ) { $left ++; } if ($left < $right) { $array [$right --] = $array [$left]; } } // 3.获取中枢点位置 $array [$left] = $stand; return $left; } /** * Description:快速排序主流程函数 */ 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 ); } }