小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

07 字符串 半分查找法

 雪柳花明 2017-03-13
下面是折半查找的實現(xiàn),data是按升序排列的數(shù)據(jù),x是查找下標,y是查找的上標,
v是查找的數(shù)值,返回v在data的索引,若沒找到返回-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
}

正確的方法:
上下標沒有寫清楚,題目所指的應(yīng)該是[x,y),這樣5應(yīng)該是m-1
而在下標為[x,y]的情況下,1,4,5都是有問題的。。。。正確版本應(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
    }

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約