折半查找

Posted duzhangdan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了折半查找相关的知识,希望对你有一定的参考价值。

一、问题描述

   N个有序整数数列已放在一维数组中,利用二分查找法查找整数m在数组中的位置。若找到,则输出其下标值;反之。则输出“not be found!”。

二、设计思路

   先找到中间的的值,将m与其对比,若相等,找到,若大于m则在前半部分找m,若小于m则在后半部分找m。

三、流程图

开始

找到数组中间的位置与m对比

如果大于m

在前一部分找

小于m在后一部分找

找到后输出

    

四、伪代码

头文件

定义一个数组,

找到中间位置数

如果是输出                          

若大于则在前一部分找

若小于则在后一部分找

重复以上两部

知道找到为止

五、代码实现

#include<stdio.h>

#define N 10

int main()

       int a[N]=-3,4,7,9,13,45,67,89,100,180,low=0,high=N-1,mid,k=-1,m;

       printf("a数组中的数据如下:\\n");

       for(int i=0;i<N;i++)

              printf("%d ",a[i]);

       printf("\\n");

       printf("Enter m:");

       scanf("%d",&m);

       while(low<=high)

      

              mid=(low+high)/2;

              if(m<a[mid])

                     high=mid-1;

              else

                     if(m>a[mid])

                            low=mid+1;

                     else

                    

                            k=mid;

                            break;

                    

      

       if(k>=0)

              printf("m=%d,index=%d\\n",m,k);

       else

              printf("not be found!\\n");

折半查找(二分查找)

#coding:utf-8


‘‘‘
折半查找返回值是mid+1
‘‘‘

def half_search(data,target):
    low,high = 0,len(data)-1
    while low<=high:
        mid = (low+high)//2
        if data[mid] == target:
            return  mid+1
        elif data[mid] > target:
            high = mid -1
        else:
         low = mid+1
    return 0




data = [1,3,4,67,6]
target = 6
a=half_search(data,target)-1
print a

  

以上是关于折半查找的主要内容,如果未能解决你的问题,请参考以下文章

查找算法之折半查找+分块查找

C++折半查找法

C语言折半查找法详细代码(假如有10个已排好序的数)

查找有序表折半查找判定树二叉排序树3阶B-树

C语言折半查找之递归算法

折半查找的概念及实现代码