資料結構之尋找(php代碼實現)

來源:互聯網
上載者:User

標籤:資料結構 順序尋找 二分尋找 二叉搜尋 php

/** * Search_Seq($arr,$elem):順序尋找 * Search_Seq2($arr,$elem):順序尋找(最佳化) * Search_bin($arr,$elem):二分尋找 * SearchBST($elem):二叉搜尋 */class Search{    public $arr;    function __construct($arr)    {        $this->arr = $arr;    }    /**     * 順序尋找     * @param $arr  在$arr數組中尋找     * @param $elem 尋找數組中是否有存在元素$elem,有則返回在數組中的位置;沒有則返回0     */    public static function Search_Seq($arr,$elem){        for($i=0;$i<count($arr);$i++) {            if($arr[$i]==$elem){                return $i;            }        }        return 0;    }    //此演算法是對上面演算法的一種最佳化    public static function Search_Seq2($arr,$elem){        $i=0;        while($arr[$i]!=$elem){            $i++;        }        return $i;    }    /**     * 二分尋找(也叫做折半尋找),前提是數組必須有序——從小到大排列     * @param $arr  在$arr數組中尋找     * @param $elem 尋找數組中是否有存在元素$elem,有則返回在數組中的位置;沒有則返回0     */    public static function Search_bin($arr,$elem){        $low=0;        $high=count($arr);        while($low<=$high){            $mid=round(($low+$high)/2);//            $mid=$low+($low+$high)*($elem-$arr[$low])/($arr[$high]-$arr[$low]); //若將$mid的值改為此句,則就成了插值尋找了。這種尋找演算法在資料大小分布比較均勻的時候,效率會比折半尋找高一些。            if($elem<$arr[$mid]){                $high=$mid-1;            }else if($elem>$arr[$mid]){                $low=$mid+1;            }else{                return $mid;            }        }        return 0;    }    /**     * 二叉排序樹     * @param $elem     * @return int     */    public function SearchBST($elem){       return $this->find($this->arr[0],$elem,0);    }    private function find($root,$elem,$i){        if($i>count($this->arr) || !$root){            return ‘Error‘;        }        if($elem==$root){            return $i;        }        if($elem<$root && $i*2+1<count($this->arr)){            return  $this->find($this->arr[$i*2+1],$elem,$i*2+1);        }else if($elem>$root && $i*2+2<count($this->arr)){            return  $this->find($this->arr[$i*2+2],$elem,$i*2+2);        }        return 0;    }}


本文出自 “一切皆有可能” 部落格,請務必保留此出處http://noican.blog.51cto.com/4081966/1610884

資料結構之尋找(php代碼實現)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.