C/C++程序設(shè)計(jì)常用算法——查找算法

文檔聲明:
以下資料均屬于本人在學(xué)習(xí)過(guò)程中產(chǎn)出的學(xué)習(xí)筆記封豪,如果錯(cuò)誤或者遺漏之處佛点,請(qǐng)多多指正。并且該文檔在后期會(huì)隨著學(xué)習(xí)的深入不斷補(bǔ)充完善挂洛。


資料僅供學(xué)習(xí)交流使用礼预。
作者:Aliven888

1、簡(jiǎn)述

? 程序設(shè)計(jì)的關(guān)鍵就是算法虏劲,算法簡(jiǎn)單來(lái)說(shuō)就是程序設(shè)計(jì)時(shí)問(wèn)題解題步驟或者數(shù)據(jù)數(shù)據(jù)的流程托酸。這里我們將介紹以下幾種常用的算法:迭代法、窮舉法柒巫、遞推法励堡、遞歸發(fā)、回溯法堡掏、貪婪法应结、查找算法、排序算法泉唁。

本章節(jié)主要介紹查找算法鹅龄。

2、查找算法

? 查找算法:這里我們介紹兩種比較常見(jiàn)的查找算法:順序查找和二分查找亭畜。

2.1扮休、順序查找

? 順序查找:一般用于在數(shù)組(或者鏈表)中查找指定的某個(gè)元素(或者節(jié)點(diǎn))。要查找的數(shù)據(jù)一般稱(chēng)為關(guān)鍵字拴鸵,順序查找就是將給定的目標(biāo)值逐個(gè)與數(shù)組元素(或者鏈表節(jié)點(diǎn))進(jìn)行比較玷坠,如果有與目標(biāo)值相同的數(shù)組元素(或者鏈表節(jié)點(diǎn))蜗搔,則查找成功并輸出關(guān)鍵信息,否則認(rèn)為查找失敗侨糟,沒(méi)有與目標(biāo)值相同的元素(或者節(jié)點(diǎn))碍扔。

特點(diǎn):
? 適用于在無(wú)序的數(shù)據(jù)集合中查找目標(biāo)值。缺點(diǎn)就是在找到目標(biāo)值之前要把其他所有值遍歷一遍秕重。

代碼實(shí)例:

int onFindValuePos(int iList[], int iLen, int key)
{
    int iRet = -1;

    for (size_t i = 0; i < iLen; i++)
    {
        if (key == iList[i])
        {
            iRet = i;
            break;
        }
    }

    return iRet;
}

int main()
{
    int iList[] = {1,2,3,4,5};
    int iLen = 5;
    int key = 3;
    cout << "3 pos is [" << onFindValuePos(iList, iLen, key) << "]" << endl;

    system("pause");
    return 0;
}

運(yùn)行結(jié)果:

運(yùn)行結(jié)果

2.2不同、二分查找

? 二分查找:數(shù)據(jù)集合一般是有序的,如果不是有序的溶耘,在使用二分法之前需要先進(jìn)行排序二拐。

二分法思想:

  • 把查找范圍對(duì)半分為兩部分。
  • 比對(duì)目標(biāo)值與中間數(shù)據(jù)的大小凳兵,判斷該目標(biāo)值屬于前半部分還是后半部分百新。
  • 對(duì)目標(biāo)值所屬的部分在分為兩部分,然后再將該目標(biāo)值與此時(shí)的中間值對(duì)比庐扫,找對(duì)當(dāng)前所屬的部分饭望,然后依次往復(fù),直到遍歷完數(shù)據(jù)集合或者找到目標(biāo)值所在的位置(最后一個(gè)分割形庭,兩部分長(zhǎng)度都為1表示執(zhí)行完成)铅辞。

代碼實(shí)例:

int onFindValuePos(int iList[], int iLen, int key)
{
    int iRet = -1;
    int iFront = 0;
    int iTail = iLen - 1;
    int iMid = 0;

    while (iFront <= iTail)
    {
        iMid = (iTail + iFront) / 2;
        if (key == iList[iMid])
        {
            iRet = iMid;
            break;
        }
        else if(key < iList[iMid])
        {
            iTail = iMid - 1;
        }
        else
        {
            iFront = iMid + 1;
        }
    }

    return iRet;
}

int main()
{
    int iList[] = {1,2,3,4,5,6,7,8,9};
    int iLen = 9;
    int key = 5;
    cout << "5 pos is [" << onFindValuePos(iList, iLen, key) << "]" << endl;

    system("pause");
    return 0;
}

運(yùn)行結(jié)果:

運(yùn)行結(jié)果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市萨醒,隨后出現(xiàn)的幾起案子斟珊,更是在濱河造成了極大的恐慌,老刑警劉巖富纸,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囤踩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡晓褪,警方通過(guò)查閱死者的電腦和手機(jī)堵漱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涣仿,“玉大人勤庐,你說(shuō)我怎么就攤上這事”涔” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵涝涤,是天一觀(guān)的道長(zhǎng)媚狰。 經(jīng)常有香客問(wèn)我,道長(zhǎng)阔拳,這世上最難降的妖魔是什么崭孤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任类嗤,我火速辦了婚禮,結(jié)果婚禮上辨宠,老公的妹妹穿的比我還像新娘遗锣。我一直安慰自己,他們只是感情好嗤形,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布精偿。 她就那樣靜靜地躺著,像睡著了一般赋兵。 火紅的嫁衣襯著肌膚如雪笔咽。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,850評(píng)論 1 290
  • 那天霹期,我揣著相機(jī)與錄音叶组,去河邊找鬼。 笑死历造,一個(gè)胖子當(dāng)著我的面吹牛甩十,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吭产,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侣监,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了垮刹?” 一聲冷哼從身側(cè)響起达吞,我...
    開(kāi)封第一講書(shū)人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荒典,沒(méi)想到半個(gè)月后酪劫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寺董,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年覆糟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遮咖。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滩字,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出御吞,到底是詐尸還是另有隱情麦箍,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布陶珠,位于F島的核電站挟裂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏揍诽。R本人自食惡果不足惜诀蓉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一栗竖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渠啤,春花似錦狐肢、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拧簸。三九已至屯碴,卻和暖如春闸氮,著一層夾襖步出監(jiān)牢的瞬間侠鳄,已是汗流浹背歹叮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工姻采, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峡捡,地道東北人永毅。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓委刘,卻偏偏與公主長(zhǎng)得像丧没,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锡移,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349