php关联数组排序(快速排序)

4次阅读

使用环境和条件
有这样一种情况,php 里面的关联数组,如果下面这样的数组数据:
[php]
$array = array(
array(
'name' => "xiao",
'age' => 3
),
array(
'name' => 'wang',
'age' => 1
),
array(
'name' => 'chen',
'age' => 2

);
我们要对数组针对 age 字段进行排序,php 自带的函数,无论是那种 sort, 显然都不能满足我们的需求,因此我们可以自己写一个快速排序代码,很快的实现我们的要求
注意情况
php 里面是没有指针存在的,所以当想要引用传递的时候,我们不能跟 C 代码一样,直接这样写 quicksort(int *A, int begin, int end),而是要使用 php 的 & 运算符,将数组的地址传递跟快速排序函数,这样就能在 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);
}
}
我在项目上就用到了这个快速排序,挺开心的,不枉这个 10 月 1 假期花了 N 天 AC 快速排序的 c 代码

正文完