qq1242009750 发表于 2018-1-11 16:57:38

折半查找法思想

本帖最后由 qq1242009750 于 2018-1-11 18:00 编辑

折半查找法思想



例子:


代码如下:
//折半查找法
int bin_Search(int *Arr, int num)
{
        int low = 0, mid, hig = MAX - 1;

        while (low <= hig)                        //如果low大于hig时就是溢出了,也就可以判断要查找的数不在数组内
        {
                mid = (hig + low) / 2;
                if (Arr < num)
                {
                        low = mid + 1;
                }
                else if(Arr > num)
                {
                        hig = mid - 1;
                }
               
                if (Arr == num)
                {
                        return mid;
                }
        }
       
        return -1;   //查找失败!
}

递归版本:
int CSearch::recursion(int *Arr, int low, int mid, int hig, int num)
{
        if (low > hig)        //判断是否出错
        {
                return -1;
        }
       
        if (Arr == num)        //判断是否找到
        {
                return mid;
        }

        return Arr > num ? recursion(Arr, low, (low + mid - 1) / 2, mid - 1, num) : recursion(Arr, mid + 1, (mid + 1 + hig) / 2, hig, num);//判断mid的值是否大于查找值或小于(用于传递不同的参数)
}
页: [1]
查看完整版本: 折半查找法思想