首页 > 其他分享 >C语言—实现二分查找(1)

C语言—实现二分查找(1)

时间:2022-12-28 17:06:39浏览次数:42  
标签:二分 arr 下标 int mid C语言 查找 left

—,顺序查找和二分查找
二:逻辑
三,代码实现和结果
四,知识点

—,顺序查找和二分查找

顺序查找:从第一个数字一个一个往后找,直到找到为止。

                ag:有一组有序数字:1,2,3,4,5,6,7,8,9,10;从这组数字中找出数字7。  若按顺序查找,第一个找到的数字为1,不等于7;继续找,第二个找到的数字为2,不等于7;以此类推,直到找到7停止,一共找了7次。按照这种方式查找,最坏的查找次数为n次。可见,这种查找方式效率低

二分查找:二分查找也称折半查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列

ag:有一组有序数字:1,2,3,4,5,6,7,8,9,10;从这组数字中找出数字7。   按二分查找的方法,先找出中间的数(5),再与要找的数字k进行比较,若5<k,查找范围变成了6到10;若5>k,查找范围变为1到4,然后再在查找范围里进行二分查找,直到找到为止,一共找了3次。可见,这种方法效率高

二:逻辑

C语言—实现二分查找(1)_数组

三:代码实现和结果

#include<stdio.h>

//在一个数组中查找具体的某个数

int main()

{

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

int k=7;

int sz=sizeof(arr)/sizeof(arr[0]);

int left=0; //左下标

int right=sz-1; //右下标

while(left<=right) //二分查找的次数>=1

{

int mid=(left+right)/2; //要注意执行下面语句后left,right都改变了

if(arr[mid]<k) //mid在k的左边

left=mid+1; //右下标不变,左下标=mid+1

else if(arr[mid]>k) mid在k的右边

right=mid-1; //左下标不变,右下标=mid-1

else //不能使用3个if语句

{

printf("找到了,下标是%d\n",mid);

break;

}

}

if(left>right)

printf("找不到\n");return 0;}

C语言—实现二分查找(1)_二分查找_02

让k=17,结果:

C语言—实现二分查找(1)_数组_03

四:知识点

1、​数组内元素的个数=数组的空间大小除以数组内一个元素的空间大小

2、sizeof()函数:计算变量、数组、类型的大小,单位是字节

     sizeof(arr):计算arr所占空间大小

标签:二分,arr,下标,int,mid,C语言,查找,left
From: https://blog.51cto.com/u_15908092/5975718

相关文章

  • Linux文件查找查看
    文件类型区分即文件权限的第一个,如:-rw-r--r--,则该文件属于普通文件-普通文件d目录c字符设备文件,终端就是一个典型b......
  • C语言结构体指针赋值
    C语言结构体指针赋值在给结构体指针中结构体成员赋值时,容易出现语法错误结构体typedefstructsensor{ intfilterFrequency; intupdateFrequency; intvalue;}Sen......
  • 「查找表」观沧海
    本题为12月28日22寒假集训每日一题题解题目来源:(未知)题面题目描述《观沧海》曹操东临碣石,以观沧海。水何澹澹,山岛竦峙。树木丛生,百草丰茂。秋风萧瑟,洪波涌起......
  • 访问者模式对树进行递归查找
    fun<T,ID>CrudRepository<T,ID>.visit(start:ID?,visitor:(T)->Boolean)whereT:TreeNode<ID>{varcurrentId=startdo{valnode=fin......
  • 【新生寒训】day 1 二分
    【新生寒训】day1二分二分是非常重要滴......
  • [数据结构]单向链表的翻转(C语言)
    单向链表的翻转单向链表翻转思路假设链表是:1->3->5->∅,所要求得的链表是5->3->1->∅。只需要将每个节点的next指向其之前的一个节点即可。对于第一个节点,如果是头......
  • Unity中查找子组件GameObject或Component的操作汇总
    1.GameObject属性:tag常用于区分游戏中不同类型的对象(例如区分玩家和NPC)name:游戏物体的名称 方法:SetActive:使游戏物体处于活跃/不活跃状态例:other.gameObject.SetAc......
  • 哈希表之单词查找并输出其上下文
    哈希表之单词查找英文文章,写入一个文本文档,作为基础测试数据。建立一个待查关键字文件,存储待查询的单词。输入查询的单词,输出该单词的出现次数,及每个出现位置的上下文(......
  • 【C语言】memcpy() 内存拷贝不重叠
    前言本篇博客就来介绍下关于C语言常用的内存函数之memcpy()函数。 ......
  • 【C语言】calloc()、realloc()
    ......