日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

07 字符串 半分查找法

 雪柳花明 2017-03-13
下面是折半查找的實(shí)現(xiàn),data是按升序排列的數(shù)據(jù),x是查找下標(biāo),y是查找的上標(biāo),
v是查找的數(shù)值,返回v在data的索引,若沒(méi)找到返回-1。代碼不正確是____。

public int bsearch(int[] data, int x, int y, int v) {
    int m;
    while(x<y){ //1
        m = x + (y-x)/2; //2
        if(data[m] == v) return m; //3
        else if(data[m] > v) y = m; //4
        else x = m; //5
    }
    return -1; //6
}

正確的方法:
上下標(biāo)沒(méi)有寫(xiě)清楚,題目所指的應(yīng)該是[x,y),這樣5應(yīng)該是m-1
而在下標(biāo)為[x,y]的情況下,1,4,5都是有問(wèn)題的。。。。正確版本應(yīng)該是這樣吧
while(x<=y) {
        m = x + (y-x)/2; //2
        if(data[m] == v) return m; //3
        else if(data[m] > v) y = m-1; //4
        else x = m+1; //5
    }

補(bǔ)充:這里下標(biāo)是個(gè)坑,記住上限有沒(méi)有包含就可以對(duì)付1,4,5處的問(wèn)題(熟記理解兩個(gè)版本的代碼區(qū)別),然后是2,寫(xiě)成x+(y-x)/2是防止xy都很大的情況下x+y越界。這樣的話應(yīng)對(duì)二分查找應(yīng)該夠了

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約