首页 > 其他分享 >实现一个整型有序数组的二分查找(函数)

实现一个整型有序数组的二分查找(函数)

时间:2023-01-20 16:32:13浏览次数:42  
标签:二分 sz arr int mid 查找 整型 sizeof left

解法:

#include<stdio.h>
int binary_search(int arr[],int k,int sz)
{
//int sz=sizeof(arr)/sizeof(arr[0]);不能在这
int left=0;
int right=sz-1;
while(left<=right)
{
int mid=(left+right)/2;//因为每次查找时 中间元素的下标都要改变 所以不能放在while的外面
if(arr[mid]<k)
{
left=mid+1;
}
else if(arr[mid]>k)
{
right=mid-1;
}
else
{
return mid;
}
}
return -1;
}
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 ret=binary_search(arr,k,sz);//arr此时传过去的只是数组的第一个元素的地址 这里的arr本质是指针
//最后其实是依靠binary_search(arr,k,sz),将这个函数所返回的值(-1或者其他数)放进if中比较来达到目的
if(ret==-1)
{
printf("找不到指定的数字\n");
}
else
{
printf("找到了,下标是;%d\n",ret);
}
return 0;
}

1.写出轮廓

#include<stdio.h>
int binary_search(int arr[],int k,int sz)
{
//等待补充
}
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 ret=binary_search(arr,k,sz);
if(ret==-1)
{
printf("找不到指定的数字\n");
}
else
{
printf("找到了,下标是;%d\n",ret);
}
return 0;
}

注:第十行int sz=sizeof(arr)/sizeof(arr[0]);不能放在函数定义的int binary_search(int arr[],int k,int sz)里面。

因为arr此时传过去的只是数组的第一个元素的地址  这里的arr本质是指针

2.细化

int binary_search(int arr[],int k,int sz)
{
//int sz=sizeof(arr)/sizeof(arr[0]);不能在这
int left=0;
int right=sz-1;
while(left<=right)
{
int mid=(left+right)/2;//因为每次查找时 中间元素的下标都要改变 所以不能放在while的外面
if(arr[mid]<k)
{
left=mid+1;
}
else if(arr[mid]>k)
{
right=mid-1;
}
else
{
return mid;
}
}
return -1;
}

注:第八行int mid=(left+right)/2;由于每次查找时  中间元素的下标都要改变 所以不能放在while的外面

(具体如何二分法过程在前面的文章“在有序数组中,查找具体的某个数字n”有讲)


标签:二分,sz,arr,int,mid,查找,整型,sizeof,left
From: https://blog.51cto.com/u_15899086/6020721

相关文章

  • 1817. 查找用户活跃分钟数
    1817.查找用户活跃分钟数题解模拟:用map存,map的key存用户id,value存该用户的操作的time列表(去重,可以用set)统计res,遍历map,map的value为该用户的操作时间list,用这个list......
  • LeetCode寻找两个正序数组的中位数(vector/二分查找 划分数组)
    原题解这道题可以转化成寻找两个有序数组中的第k小的数,其中k为(m+n)/2或(m+n)/2+1786.第k个数题目给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2......
  • LINUX学习之查找文件命令(七)
    find命令命令描述find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端以下是find命令的使用参数:find命令参数描述-name按照指定的......
  • 二分
    二分1.整数二分用一个性质将区间分为满足性质和不满足性质,答案是二分的边界情况一代码分析intbsearch_1(intl,intr){while(l<r){intmid......
  • 二分找函数答案
      E-TokitsukazeandFunction_2023牛客寒假算法基础集训营2(nowcoder.com)思路:可以知道这是一个凹型函数,但是不是严格中间小于两边可以三分  也可以......
  • 经典算法——顺序查找
    ......
  • C语言中的整型数据类型(你真的了解吗)
    1.整型数据类型C语言里面的整数数据类型类型名称C语言中的关键字注释字符型char表示一个很小的整数短整型short表示一个不怎么大的整数整型int生活中一般的整数都可以表示......
  • 顺序查找和二分查找实验
    数据结构课上的一份实验报告主要是应对实验报告,应该存在逻辑错误的地方没改。#include<iostream>typedefintKeyType;typedefintInfoType;#defineMAXSIZE100......
  • 在vim中的查找和替换
    1,查找在normal模式下按下 / 即可进入查找模式,输入要查找的字符串并按下回车。Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。Vim查找支持正则表达式,例如/v......
  • 使用sed 命令查找和替换文件中的字符串的方法总结
    sed命令是什么sed命令表示StreamEditor(流编辑器),用来在Linux上执行基本的文本操作。它可以执行各种功能,如搜索、查找、修改、插入或删除文件。此外,它也可以执行复杂......