zoukankan      html  css  js  c++  java
  • 一些语法,算法。

     
     /** 
         * 树递归,传引用到底
         * @param $id 要递归的id节点
         * @param array $arr 返回的多维数组
         */
        public static function getMenuTree($id, &$arr = array())
        {
            $sql = 'select bm_ModuleID as id,bm_ModuleName as text,bm_ModuleUrl as url from BM_ModuleStructure where bm_FModuleID = %d';
            $ret = self::getBySql($sql, array($id));
            if ($ret) {
                $arr['children'] = $ret;
                foreach ($arr['children'] as $key=>$v) {
                    self::getMenuTree($v['id'],$arr['children'][$key]);
                }
            }
        }
    /**
    *递归返回值需要注意的问题
    */
    function
    findFile($directory, $fileName) { $mydir = dir($directory); while ($file = $mydir->read()) { if ((is_dir("$directory/$file")) AND ($file != ".") AND ($file != "..")) { return findFile("$directory/$file", $fileName); //重点 } else if ($file == $fileName) { $mydir->close(); return "$directory/$file"; //如果是出现的递归,此处返回的是递归里面的函数的值,外面还要返回一层。 } } $mydir->close(); return null; }

    /*
    * *引用的问题,第一次foreach,将$a 指向 arr[2],$a = &$arr[2]; *第二次foreach $a一次赋值,arr[2]也响应改变,121,然后$a被unset,第二第三次的$a都是new的,而且不是引用变量。arr[2]也就没有再被改变。 */ $arr = array('a'=>1, 'b'=>2, 'c'=>3); foreach ($arr as &$a); // do nothing. maybe? foreach ($arr as $a) // do nothing. maybe?
    {
      unset($a);
    }
    print_r($arr); //122

    /**
    *上面的是变量引用
    *下面再来看一个函数引用
    */
    function &test() //需要调用例如:$a = &test();这引用函数时,该被引用的函数固定格式为:1,必须有返回值,2,函数前面需要加&号。
    {
      static $b = 0;
      echo $b;
      return $b;
    }
    //调用
    $a = test(); 没有起到引用的作用。函数定义那里的&是规定格式而已。
    $a = &test();
    $a = 5;
    test();
    输出: 0,5;
    沉底法
    for ($i = 0; $i < count($arr); $i++) {
            for ($j = 0; $j < count($arr) - $i -1; $j++) {
                if($arr[$j] < $arr[$j+1]){
                    $tmp = $arr[$j];
                    $arr[$j] = $arr[$j+1];
                    $arr[$j+1] = $tmp;
                }
            }
        }
    先抛开外循环,内循环就是循环一遍,将最小的元素沉到底。
    循环count($arr)次后,达到目的。
    count($arr)-$i-1意思就是沉下去的元素都是确定排序的了
    
    反过来冒泡法
    for ($i = 0; $i < count($arr); $i++) {
        for ($j = count($arr)-1; $j > $i; $j--) {
            if($arr[$j] < $arr[$j-1]){
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j-1];
                $arr[$j-1] = $tmp;
            }
        }
    }


    暗夜之中,才见繁星;危机之下,暗藏转机;事在人为,为者常成。
  • 相关阅读:
    [HNOI2002]营业额统计
    HDU 1374
    HDU 3345
    HDU 2089
    Graham扫描法
    Codeforces 1144D Deduction Queries 并查集
    Codeforces 916E Jamie and Tree 线段树
    Codeforces 1167F Scalar Queries 树状数组
    Codeforces 1167E Range Deleting
    Codeforces 749E Inversions After Shuffle 树状数组 + 数学期望
  • 原文地址:https://www.cnblogs.com/zenghansen/p/3990040.html
Copyright © 2011-2022 走看看