折半查找(调试)

折半查找:

数字: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;

}


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