c语言实现一维数组折半查找(二分查找)

1.sizeof()函数:计算数组元素个数

#include"stdio.h"
int main(){
  int arr[10]={0};
  printf("%d",sizeof(arr));//数组arr所占总字节大小
  printf("%d",sizeof(arr[0]));//数组中单个元素所占字节大小
  printf("%d",sizeof(arr)/sizeof(arr[0]));//元素个数  
  return 0;
}

(1)sizeof(arr):计算数组arr占的字节大小,这里arr是一个整型数组,1个int占4个字节故输出40

(2)sizeof(arr[0]):计算单个数组元素占的大小

(3)sizeof(arr)/sizeof(arr[0]):数组总字节大小/单个字节大小=数组元素个数,这个式子表示数组元素个数。

2.算法思想:

  二分查找是一种常见的查找算法,它的基本思想是将有序数组分成两部分,取中间值与目标值进行比较,如果相等则返回,如果中间值大于目标值,则在左半部分继续查找,否则在右半部分继续查找,直到找到目标值或者数组被遍历完。

  二分查找的时间复杂度为 O(log n),比线性查找的时间复杂度 O(n) 要快得多,但是它要求数组必须是有序的。

  一句话总结:把串数分为左右两部分,左边小右边大,取中间值和目标值对比,如果中间大于目标,就说明目标值比中间值小,应该在左边部分查找,反之在右边部分继续查找

3.代码实现:

#include"stdio.h"
#include"string.h"
int main(){
  int arr[10]={1,2,3,4,5,6,7,8,9};//定义一个升序数组
  int i=0;//表示第一个元素下标
  int j=sizeof(arr)/sizeof(arr[0])-1;//最后一个元素的下标
  int key=7;//目标数
  int k=0;//记录数组中间值的下标
  int f=0;
  while(i<=j){
   k=(i+j)/2;//中间下标
   //如果中间值大于目标值,到中间值的左边查找
   if(arr[k]>key){
     j=k-1;//查找的最后一个元素下标变成中间值的前一个元素
   }
   //如果中间值小于目标值,到中间值的左边查找
   else if(arr[k]<key){
     i=k+1;//查找的最后一个元素下标变成中间值的后一个元素
   }
   //找到了
   else{
     f=1;//令查找数为1
     break;
    }
   }
   if(f==1){
    printf("找到了!下标是%d\n",k);
   }
   else{
   printf("没有该元素!");
   }
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是lethe先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值