二分查找算法

二分查找法(又称折半查找):

二分查找法的前题是:序列有序情况下且为顺序存储结构。
其优点是查找速度快,缺点是要求所要査找的数据必须是有序序列。
假设有一组序列:
arr[] = [-32, 12, 16, 24, 36, 45, 59, 98]
要查找的关键数 key=12,将所要査找的序列的中间下标的数据与所要査找的元素进行比较,如果相等,则表示査找成功;若不相等,则将整个序列拆成左右两半部分,判断key值在哪部分,进而继续进行查找操作。这里使用角标值辅助判断,具体实现如示例所示:

示例

具体C语言实现程序如下:

  1. #include <stdio.h>
  2. binSearch(int a[], int n, int key){    //a[]代表数组序列,n代表数组序列的n个元素,key代表要查找的关键数
  3.     int lowIndex = 0;
  4.     int highIndex = n - 1;
  5.     while(lowIndex <= highIndex){       //循环终止的条件
  6.         int midIndex = (lowIndex + highIndex)/2;
  7.         int midValue = a[midIndex];
  8.         if(midValue<key)
  9.             lowIndex = midIndex + 1;
  10.         else if(midValue>key)
  11.             highIndex = midIndex - 1;
  12.         else
  13.             return midIndex;
  14.     }
  15.     return -1;     //不满足while循环条件
  16. }
  17. int main(){
  18.     int i, keyValue, result;
  19.     int a[8]={13, 15, 19, 28, 33, 45, 78, 106};
  20.     for(i=0; i<8; i++)
  21.         printf("%d\t", a[i]);
  22.     printf("\n请输入要查找的元素值:");
  23.     scanf("%d",&keyValue);
  24.     result = binSearch(a,8,keyValue);
  25.     if(-1 == result)
  26.         printf("查找失败 \n");
  27.     else
  28.         printf ("查找成功 \n");
  29.     return 0;
  30. }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值