二分查找

二分部查找

查找,想必大家都知道是什么意思。其中有顺序查找,二分查找,哈希查找等。今天给大家介绍一下二分查找,也叫做折半查找,它的定义其实很简单,好比你要找一个数字,在所有的关键字中,先找到最中间的那个数字,如果你所找的数字比它大,则可以折一半,以此类推,就可以找到你所需要的数字。
例如1 2 3 4 5 6 7 8 9 10这10个顺序的数字,如果要查找8这个数字,我们先可以其中位置在中间的数字,由于是偶数个数字,则可以先找到5,发现比5大,于是可以把位置定到5的右边,再找中间的数字,最后会找到数字8。函数代码如下

int SearchNum(int num[],int key,int length)//num表示数组,key为所需要查询的关键字,length为数组长度
{
  int left = 0;//做左边位置
  int right = LENGTH - 1;//最右边位置
  int mid = 0;//数组的中间位置
  while(left<=right){   //查询条件,如果跳出while循环则表示查找失败
    mid=(right + left)/2;
    if(num[mid]<key){
      left = mid + 1;
    }
    else if(num[mid]>key){
      right = mid - 1;
    }
    else if(num[mid]==key){
      return mid+1;//查找成功,返回其位置
    }
  }
  return 0;//未查找到则返回0
}

代码写的不是很规范大家将就着看看咯,整体代码如下

#include<stdio.h>
#define LENGTH 10
int SearchNum(int num[],int key,int length)//num表示数组,key为所需要查询的关键字,length为数组长度
{
  int left = 0;//做左边位置
  int right = LENGTH - 1;//最右边位置
  int mid = 0;//数组的中间位置
  while(left<=right){   //查询条件,如果跳出while循环则表示查找失败
    mid=(right + left)/2;
    if(num[mid]<key){
      left = mid + 1;
    }
    else if(num[mid]>key){
      right = mid - 1;
    }
    else if(num[mid]==key){
      return mid+1;//查找成功,返回其位置
    }
  }
  return 0;//未查找到则返回0
}
int main()
{
  int arr[LENGTH];
  int i = 0;
  int word;
  printf("请输入%d个顺序的数字:\n",LENGTH  );
  for(i = 0;i<LENGTH;i++){
    scanf("%d",&arr[i]);
  }
  printf("请输入你所需要的查询的数字:\n");
  scanf("%d",&word);
  if(SearchNum(arr,word,LENGTH)==0){
    printf("没有找到\n");
  }
  else{
    printf("已经找到,位置是在%d\n",SearchNum(arr,word,LENGTH));
  }
  return 0;
}

此外,祝大家新年快乐
武汉加油!!!
中国加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值