鱼C论坛

 找回密码
 立即注册
查看: 3825|回复: 6

二分查找c语言表述怎么写

[复制链接]
发表于 2022-4-18 21:14:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
鱼油们,我最近学了二分查找的概念,不过不会用c语言写出来,可不可以帮帮忙
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-18 22:32:23 | 显示全部楼层
  1. #include <stdio.h>

  2. // 二分查找
  3. int binarySearch(int arr[], size_t n, int elem) {
  4.         int L = 0, R = n - 1, m; // L 和 R 为左右边界,m 为中间位置
  5.         while (L <= R) {
  6.                 m = (L + R) >> 1;
  7.                 if (arr[m] < elem) {
  8.                         L = m + 1;
  9.                 }
  10.                 else if (arr[m] > elem) {
  11.                         R = m - 1;
  12.                 }
  13.                 else {
  14.                         return m;
  15.                 }
  16.         }
  17.         return -1;
  18. }

  19. int main() {
  20.         int arr[] = { 13, 5, 24, 86, 14, 55, 63, 70, 1, 32 };
  21.         size_t n = sizeof(arr) / sizeof(int); // 数组长度
  22.         int x = 63;
  23.         printf("%d 在数组里的第 %d 位置", x, binarySearch(arr, n, x));
  24.         return 0;
  25. }
复制代码
  1. 63 在数组里的第 6 位置
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-18 22:41:52 | 显示全部楼层

先排序,不排序
int arr[] = { 13, 5, 24,  14, 86, 55, 63, 70, 1, 32 };
出错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-18 23:16:52 From FishC Mobile | 显示全部楼层
jhq999 发表于 2022-4-18 22:41
先排序,不排序
int arr[] = { 13, 5, 24,  14, 86, 55, 63, 70, 1, 32 };
出错

这是查找法,不是排序法,二分查找主要是查找其元素对应的位置,如果排序了,就不是原本的位置了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-19 06:42:07 | 显示全部楼层
傻眼貓咪 发表于 2022-4-18 23:16
这是查找法,不是排序法,二分查找主要是查找其元素对应的位置,如果排序了,就不是原本的位置了


二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-19 07:52:58 From FishC Mobile | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-4-19 07:59 编辑
jhq999 发表于 2022-4-19 06:42
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待 ...


哈哈,好像也是,认真想,确实不排序如何比较大小?感谢兄弟指教。这么简单的道理,现在才发现,我真是傻了

真的做多了,往往忽略了最简单,最基本的东西
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-19 07:59:01 From FishC Mobile | 显示全部楼层
jhq999 发表于 2022-4-19 06:42
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待 ...

所以二分查找只适用于有序数组查找吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 16:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表