Sian 发表于 2015-12-30 17:11:20

PHP二叉树排序的基本实现

<?php
      
      $array = array(1,42, 11, 93, 2,4,12,41,19,29);
      print_r($array);
      echo "<br/>";
      
      // 定义一个函数来实现二叉树
      function qsort($array){
                // 如果非数组或数组为空则直接返回一个空数组
                if(!is_array($array) || empty($array)) return array();
                // 如果数组长度为1时,直接返回这个数组
                $len = count($array);
                if ($len <= 1) return $array;
               
                // 定义一个变量来设置二叉树的根
                $key = $array;
                // 定义一个小数值数组和一个大数值数组
                $left = array();
                $right = array();
               
                // 如果比根小则放左边,如果比根大则放右边
                // 通过循环会将所有的大值都放到右边的数组
                // 所有的小值都放在左边的数组,但无规则
                for($i = 1;$i<$len; $i++){
                        if($array[$i] >= $key){
                              $right[] = $array[$i];
                        }else{
                              $left[] = $array[$i];
                        }
                }
               
                // 通过递归继续循环直到只有一个值时再返回
                // 递归结束后,左边数组为排序好的小值
                // 右边数组为排序好的大值,再拼合成一个数组
                $left = qsort($left);
                $right = qsort($right);
               
                // 返回最终结果
                return array_merge($left, $key, $right);
      }
      
      // 输出排序好之后的数组
      print_r(qsort($array));输出结果为:
Array ( => 1 => 42 => 11 => 93 => 2 => 4 => 12 => 41 => 19 => 29 )
Array ( => 1 => 2 => 4 => 11 => 12 => 19 => 29 => 41 => 42 => 93 )
页: [1]
查看完整版本: PHP二叉树排序的基本实现