二分查找

實現(xiàn)如下

二分查找   針對于排好序的數(shù)組進(jìn)行快速查找
思路如下:
第一步:  找到查找范圍的中間值
第二步:  中間值與查找值進(jìn)行比較:
        ----------------->如果兩個值相等, 則退出查找
        ----------------->如果中間值大于查找值, 則遞歸查找, 開始索引不變, 結(jié)束索引變?yōu)橹虚g值索引-1(必須要減掉1)
        ----------------->如果中間值小于查找值, 則遞歸查找, 結(jié)束索引不變, 開始索引變?yōu)橹虚g值索引+1(必須要加1)
第三步:  由于第二步的查找不到的情況會將對應(yīng)的開始值或者結(jié)束值的索引進(jìn)行加減操作, 所以這里判斷如果開始值大于結(jié)束值則表示查找不到
int binarySearch(int *a,int obj,int start, int end){
    
    //計算中間值
    int middle = start + ( end - start )/2;
    
    if (start > end) {//沒有找到
        return -1;
    }
    
    //拿出中間值進(jìn)行比較
    int value = a[middle];
    
    if (value == obj) {
        return middle;  //返回
    }else{
        
        if (value > obj) {//拿取左邊的值進(jìn)行比較
            
            return binarySearch(a, obj, start, middle - 1);
            
        }else{//拿取右邊的值進(jìn)行比較
            
            return binarySearch(a, obj, middle + 1, end);
        }
    }
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        int a[] = {1,2,3,4,5,6,7,8,9,10};
        int n = sizeof(a)/sizeof(int);
        int obj = 1;
        int result = binarySearch(a, obj,0,n-1);
        
        if (result == -1) {
            printf("未找到\n");
        }else{
            printf("找到了%d\n",result);
        }
        
    }
    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容