php关联数组快速排序
PHP #关联数组 #快速排序2012-10-21 09:24
有这样一种情况,php里面的关联数组,如果下面这样的数组数据:
01 | $array = array ( |
02 | array ( |
03 | 'name' => "xiao" , |
04 | 'age' => 3 |
05 | ), |
06 | array ( |
07 | 'name' => 'wang' , |
08 | 'age' => 1 |
09 | ), |
10 | array ( |
11 | 'name' => 'chen' , |
12 | 'age' => 2 |
13 | ) |
14 | ); |
我们要对数组针对age字段进行排序,php自带的函数,无论是那种sort,显然都不能满足我们的需求,因此我们可以自己写一个快速排序代码,很快的实现我们的要求
注意情况
php里面是没有指针存在的,所以当想要引用传递的时候,我们不能跟C代码一样,直接这样写quicksort(int *A, int begin, int end),而是要使用php的&运算符,将数组的地址传递跟快速排序函数,这样就能在php里实现引用传递而不是值传递
快速排序代码
01 | QuickSortProcess ( $array , 0, count ( $array ) - 1 ); |
02 | print_r ( $array ); |
03 | |
04 | /** Site: http://yige.org/php/ |
05 |
06 | * Description:快速排序中获取中枢点的位置 |
07 |
08 | */ |
09 | function QuickPartition(& $array , $left , $right ) { |
10 | // 1.基准定义 |
11 | $stand = $array [ $left ]; |
12 | |
13 | // 2.从区间两端向中间扫描,直到$left == $right为止 |
14 | while ( $left < $right ) { |
15 | while ( $left < $right && $array [ $right ] [ 'age' ] >= $stand [ 'age' ] ) { |
16 | $right --; |
17 | } |
18 | if ( $left < $right ) { |
19 | $array [ $left ++] = $array [ $right ]; |
20 | } |
21 | |
22 | while ( $left < $right && $array [ $left ] [ 'age' ] <= $stand [ 'age' ] ) { |
23 | $left ++; |
24 | } |
25 | if ( $left < $right ) { |
26 | $array [ $right --] = $array [ $left ]; |
27 | } |
28 | } |
29 | |
30 | // 3.获取中枢点位置 |
31 | $array [ $left ] = $stand ; |
32 | return $left ; |
33 | } |
34 | |
35 | /** |
36 | * Description:快速排序主流程函数 |
37 | */ |
38 | function QuickSortProcess(& $array , $begin , $end ) { |
39 | // 1.变量定义 |
40 | $pivot = NULL; // 中枢点 |
41 | |
42 | if ( $begin < $end ) { |
43 | $pivot = QuickPartition ( $array , $begin , $end ); |
44 | QuickSortProcess ( $array , $begin , $pivot - 1 ); |
45 | QuickSortProcess ( $array , $pivot + 1, $end ); |
46 | } |
47 | } |
相关文章
- php获取数组中重复数据的函数 2012/10/20
- PHP+MYSQL身份验证的方法 2012/10/20
- PHP找不到php_curl.dll的解决方法 2012/10/20
- PHP注入:谈MySql的SQL注入 2012/10/12
- php注入基本步骤 2012/10/11
- 使用php mongodb扩展时需要注意的地方 2012/09/13
- php函数file_get_contents超时处理 2012/07/13
- 注册页面用php来验证用户名是否存在。 2012/07/13
- PHP导出数据到Excel文件 2012/07/10
- 一个php随机数生成的函数 2012/07/04