zoukankan      html  css  js  c++  java
  • 折半查找(二分查找)

    折半查找(二分查找)

    1)定义以及思想(有序)

    折半查找法是效率较高的一种查找方法。假设已经按照从小到大的顺序排列好的五个整数a0-a4,要查找的数是X,其基本思想是:设查找数据的范围下限为l=1,上限为l=5,求中点m=(1+h)/2,x与中点元素am比较,若x=am,即找到,停止查找;否则,若x>am,替换下限l=m+1,到下半段继续查找;若x<am,即换上限h=m-1,到上半段继续查找,如此重复前面的过程直到找到或者l>h为止。如果l>h,说明没有此数,打印找不到信息,程序结束

    (2)算法的实现

    //二分查找必须是有顺序的

    #include<stdio.h>

    int BinSearch(int *a,int n,int x);

    int main(void){

    int num,result;

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

    printf("请输入你要查找的数据:");

    scanf("%d",&num);

    result=BinSearch(arr,10,num);

    if(result==-1)

    printf("没找到这个数据 ");

    else

    printf("在下标为%d的位置找到这个数num=%d ",result,num);

    return 0;

    }

    int BinSearch(int *a,int n,int x)

    {

    int low,high,mid;

    low=0;

    high = n-1;

    while(low<=high){

    //其中mid = (low+high)/2这个的位置。因为在外部函数中并不能确定是否low一定小于high

    mid = (low+high)/2;

    if(x>a[mid])

    low = mid+1;

    else if(x<a[mid])

    high = mid -1;

    else

    return mid;

    }

    return -1;

     

    }

  • 相关阅读:
    To do list
    2020 上半学期比赛记录
    板子
    Project Euler 1~10 野蛮题解
    卡常火车头
    防止unordered_map 被卡方法
    2019 香港区域赛 BDEG 题解
    2019徐州区域赛 ACEFM 题解 & pollard-rho & miller-rabin & 求出每个子树的重心 板子
    BST-splay板子
    ZJOI2017(2) 游记
  • 原文地址:https://www.cnblogs.com/caocx/p/5985319.html
Copyright © 2011-2022 走看看