Swift-二分查找

算法原理

二分查找算法的原理如下:

  1. 如果待查序列為空铡原,那么就返回-1,并退出算法商叹;這表示查找不到目標(biāo)元素燕刻。

  2. 如果待查序列不為空,則將它的中間元素與要查找的目標(biāo)元素進(jìn)行匹配剖笙,看它們是否相等卵洗。

  3. 如果相等,則返回該中間元素的索引弥咪,并退出算法过蹂;此時(shí)就查找成功了。

  4. 如果不相等聚至,就再比較這兩個(gè)元素的大小酷勺。

  5. 如果該中間元素大于目標(biāo)元素,那么就將當(dāng)前序列的前半部分作為新的待查序列晚岭;這是因?yàn)楹蟀氩糠值乃性囟即笥谀繕?biāo)元素鸥印,它們?nèi)急慌懦恕?/p>

  6. 如果該中間元素小于目標(biāo)元素勋功,那么就將當(dāng)前序列的后半部分作為新的待查序列坦报;這是因?yàn)榍鞍氩糠值乃性囟夹∮谀繕?biāo)元素,它們?nèi)急慌懦恕?/p>

  7. 在新的待查序列上重新開始第1步的工作狂鞋。

二分查找之所以快速片择,是因?yàn)樗谄ヅ洳怀晒Φ臅r(shí)候,每次都能排除剩余元素中一半的元素骚揍。因此可能包含目標(biāo)元素的有效范圍就收縮得很快字管,而不像順序查找那樣,每次僅能排除一個(gè)元素

func searchTargetIndex(_ nums:[Int] ,  _ target:Int) -> Int {
    
    // 二分查找的基礎(chǔ) 建立在數(shù)組為有序數(shù)組上信不,也就是說(shuō)數(shù)組內(nèi)的數(shù)據(jù)要從小到大排列
    
    // 定義雙指針嘲叔,begin為0左邊下標(biāo), end 最后一個(gè)下標(biāo)
    var begin = 0 , end = nums.count - 1
    while begin <= end {
        //取中間下標(biāo)
        let mid = begin + (end - begin) / 2
        // 如果中間下標(biāo)小于查找目標(biāo)值抽活,那么左指針右移 擴(kuò)大搜索面積
        if nums[mid] < target {
            begin = mid + 1
        }
        // 如果中間下標(biāo)大于查找目標(biāo)值硫戈,那么右指針左移 縮小搜索面積
        else if nums[mid] > target{
            end = mid - 1
        }
        else{
           return mid
        }
        
    }
    
    return -1
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市下硕,隨后出現(xiàn)的幾起案子丁逝,更是在濱河造成了極大的恐慌汁胆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霜幼,死亡現(xiàn)場(chǎng)離奇詭異嫩码,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)罪既,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門铸题,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人琢感,你說(shuō)我怎么就攤上這事回挽。” “怎么了猩谊?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵千劈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我牌捷,道長(zhǎng)墙牌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任暗甥,我火速辦了婚禮喜滨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撤防。我一直安慰自己虽风,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布寄月。 她就那樣靜靜地躺著辜膝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漾肮。 梳的紋絲不亂的頭發(fā)上厂抖,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音克懊,去河邊找鬼忱辅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谭溉,可吹牛的內(nèi)容都是我干的墙懂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扮念,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼损搬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤场躯,失蹤者是張志新(化名)和其女友劉穎谈为,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踢关,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伞鲫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了签舞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秕脓。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖儒搭,靈堂內(nèi)的尸體忽然破棺而出吠架,到底是詐尸還是另有隱情,我是刑警寧澤搂鲫,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布傍药,位于F島的核電站,受9級(jí)特大地震影響魂仍,放射性物質(zhì)發(fā)生泄漏拐辽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一擦酌、第九天 我趴在偏房一處隱蔽的房頂上張望俱诸。 院中可真熱鬧,春花似錦赊舶、人聲如沸睁搭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)园骆。三九已至,卻和暖如春出吹,著一層夾襖步出監(jiān)牢的瞬間遇伞,已是汗流浹背辙喂。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工捶牢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巍耗。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓秋麸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親炬太。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灸蟆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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

  • 一.前提條件 集合有序 二.算法原理 1. 如果待查序列為空,那么就返回-1亲族,并退出算法炒考;這表示查找不到目標(biāo)元素可缚。...
    linsin_武先生閱讀 151評(píng)論 0 0
  • 1. Java排序:冒泡排序 - 最簡(jiǎn)單 (1)比較前后相鄰的二個(gè)數(shù)據(jù)帘靡,如果前面數(shù)據(jù)大于后面的數(shù)據(jù),就將這二個(gè)數(shù)據(jù)...
    布衣不才Jerry閱讀 1,551評(píng)論 0 4
  • 今天我們講一種針對(duì)有序數(shù)據(jù)集合的查找算法:二分查找(Binary Search)算法瓤帚,也叫折半查找算法描姚。 老規(guī)矩,...
    acc8226閱讀 774評(píng)論 0 1
  • 有序數(shù)列的旋轉(zhuǎn) 現(xiàn)在待查數(shù)組不再是一個(gè)單純的有序數(shù)列了戈次,而是先把它在某個(gè)位置截為兩段轩勘,然后交換前后兩段的順序,形成...
    you的日常閱讀 389評(píng)論 1 1
  • 針對(duì)序列已經(jīng)排好序了怯邪,以從小到大排好的序列為例绊寻,每次取中間的元素和待查找的元素比較,如果中間的元素比待查找的元素小...
    mysimplebook閱讀 108評(píng)論 0 0