數(shù)據(jù)結(jié)構(gòu)——查找算法

查找在實(shí)際的應(yīng)用開(kāi)發(fā)中很常見(jiàn),所以有必要詳細(xì)深入的梳理一下。根據(jù)查找過(guò)程時(shí)咽块,是否需要同時(shí)插入或刪除元素,可分為靜態(tài)查找和動(dòng)態(tài)查找欺税。

一侈沪、靜態(tài)查找

1.順序查找
順序查找又稱為線性查找,是一種最簡(jiǎn)單晚凿、最常用的查找方法亭罪。

    /**
     * 順序查找
     * @param a 查找表
     * @param x 查找關(guān)鍵字
     * @return 關(guān)鍵字在查找表中的位置,未找到則返回-1
     */
    public static int sequenceSearch(int a[], int x) {
        if(a != null && a.length > 0) {
            for (int i = 0; i < a.length; i++) {
                if(a[i] == x) {
                    return i;
                }
            }
        }
        return -1;
    }

下面說(shuō)說(shuō)順序查找算法的事件復(fù)雜度晃虫,如果查找成功皆撩,平均的遍歷次數(shù)為(n+1)/2;如果未找到哲银,則遍歷次數(shù)為n扛吞。順序查找的優(yōu)點(diǎn)就是算法簡(jiǎn)單、應(yīng)用廣泛荆责,并且對(duì)表的結(jié)構(gòu)沒(méi)有任何要求滥比;缺點(diǎn)就是查找效率較低,當(dāng)數(shù)據(jù)量較大時(shí)做院,不推薦使用順序查找盲泛。

2.二分查找
二分查找是一種很高效的方法濒持,但前提是需要查找表中的元素必須有序排列,如果要使用該方法寺滚,則需要先對(duì)查找表中的元素進(jìn)行排序柑营。
算法思路為,取表(元素按照升序排列)中間元素作為比較對(duì)象村视,如果給定值與中間元素相等官套,則查找成功;如果給定值比中間元素大蚁孔,則在中間元素右邊的區(qū)間繼續(xù)查找奶赔;如果給定值比中間元素小,則在中間元素左邊的區(qū)間繼續(xù)查找杠氢,以此類推站刑,具體的實(shí)現(xiàn)過(guò)程如下:

    /**
     * 二分查找算法   
     * @param a 查找表
     * @param x 查找關(guān)鍵字
     * @return 關(guān)鍵字在查找表中的位置,未找到則返回-1
     */
    public static int binarySearch(int a[], int x) {
        if(a != null && a.length > 0) {
            int low = 0;
            int high = a.length;
            int mid = 0;
            while (low < high) {
                mid = (high + low)/2;
                if(a[mid] == x) {
                    return mid;
                }else if (a[mid] > x) {
                    high = mid - 1;
                }else {
                    low = mid + 1;
                }
            }
        }
        return -1;
    }

二分查找的效率較高鼻百,具體的時(shí)間復(fù)雜度為log2(n)绞旅,也就是說(shuō)8個(gè)元素中,只需要查找3次就可以知道結(jié)果(包括查找成功和未找到)愕宋。

3.斐波那契查找
需要介紹一下黃金分割比例玻靡,是指事物各部分之間存在著一定的數(shù)學(xué)關(guān)系结榄。將事物一分為二中贝,較大部分與較小部分之比等于整體與較大部分之比,比值為1:0.618或者1.618:1臼朗。
還需要介紹斐波那契數(shù)列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89…….(從第三個(gè)數(shù)開(kāi)始邻寿,后邊每一個(gè)數(shù)都是前兩個(gè)數(shù)的和)。隨著斐波那契數(shù)列的遞增视哑,前后兩個(gè)數(shù)的比值會(huì)越來(lái)越接近0.618绣否,利用這個(gè)特性,我們就可以將黃金分割比例運(yùn)用到查找技術(shù)中挡毅。
斐波那契查找是在二分查找的基礎(chǔ)上進(jìn)行優(yōu)化蒜撮,查找表必須是有序排列。
算法思路:

4.插值查找
5.分塊查找

二跪呈、動(dòng)態(tài)查找

1.二叉排序樹(shù)
2.平衡二叉樹(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末段磨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子耗绿,更是在濱河造成了極大的恐慌苹支,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件误阻,死亡現(xiàn)場(chǎng)離奇詭異债蜜,居然都是意外死亡晴埂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門寻定,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)儒洛,“玉大人,你說(shuō)我怎么就攤上這事狼速【穑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵唐含,是天一觀的道長(zhǎng)浅浮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)捷枯,這世上最難降的妖魔是什么滚秩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮淮捆,結(jié)果婚禮上郁油,老公的妹妹穿的比我還像新娘。我一直安慰自己攀痊,他們只是感情好桐腌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著苟径,像睡著了一般案站。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棘街,一...
    開(kāi)封第一講書(shū)人閱讀 49,856評(píng)論 1 290
  • 那天蟆盐,我揣著相機(jī)與錄音,去河邊找鬼遭殉。 笑死石挂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的险污。 我是一名探鬼主播痹愚,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蛔糯!你這毒婦竟也來(lái)了拯腮?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤渤闷,失蹤者是張志新(化名)和其女友劉穎疾瓮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體飒箭,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狼电,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蜒灰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肩碟。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡强窖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出削祈,到底是詐尸還是另有隱情翅溺,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布髓抑,位于F島的核電站咙崎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吨拍。R本人自食惡果不足惜褪猛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望羹饰。 院中可真熱鬧伊滋,春花似錦、人聲如沸队秩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)馍资。三九已至筒主,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間迷帜,已是汗流浹背物舒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工色洞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戏锹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓火诸,卻偏偏與公主長(zhǎng)得像锦针,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子置蜀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容