折半查找(調試)

折半查找:

數字:1,2,3,4,5,6,7,8,9,10

下標:0,1,2,3,4,5,6,7,8,9

(0+9)/2=4   low=5   5<9 輸出

(4+9)/2=6   low=7   7<9 輸出

(6+9)/2=7   low=7   8<9 輸出

(7+9)/2=8   low=9   9<9(錯誤)  不能輸出,所以程序改正時應加上=

當低位進行比較時,由於相等時已經進行比較一次則不可重複進行比較,所以,

當mid<key時,將mid值往後加一位進行比較

當mid>key時,將mid值往前挪一位進行比較

輸出結果時由於起始值給定爲0,不在所查找的範圍之內,輸出-1

後面值依次輸出下標,到9結束,查找3次,後面兩次也爲-1

 

#include<stdio.h>

int BinSearch(int*arr,intlen,intkey)

{

    intlow = 0;

    inthigh = len - 1;

    intmid;

    while(low<=high)

    {

        mid=(low+ high) >> 1;//(low+high)/2

        if(arr[mid]== key)

        {

             returnmid;

        }

        elseif(arr[mid]< key)//後半段查找

        {

             low= mid+1;

        }

        else

        {

             high= mid-1;

        }

    }

 

    return-1;

}

 

int main()

{

    intarr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    for(inti = 0; i<13; i++)

    {

        printf("%d\n", BinSearch(arr, 10, i));

    }

    return0;

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章