鱼C论坛

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

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

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

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

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

x
鱼油们,我最近学了二分查找的概念,不过不会用c语言写出来,可不可以帮帮忙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

// 二分查找
int binarySearch(int arr[], size_t n, int elem) {
        int L = 0, R = n - 1, m; // L 和 R 为左右边界,m 为中间位置
        while (L <= R) {
                m = (L + R) >> 1;
                if (arr[m] < elem) {
                        L = m + 1;
                }
                else if (arr[m] > elem) {
                        R = m - 1;
                }
                else {
                        return m;
                }
        }
        return -1;
}

int main() {
        int arr[] = { 13, 5, 24, 86, 14, 55, 63, 70, 1, 32 };
        size_t n = sizeof(arr) / sizeof(int); // 数组长度
        int x = 63;
        printf("%d 在数组里的第 %d 位置", x, binarySearch(arr, n, x));
        return 0;
}
63 在数组里的第 6 位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

先排序,不排序
int arr[] = { 13, 5, 24,  14, 86, 55, 63, 70, 1, 32 };
出错
想知道小甲鱼最近在做啥?请访问 -> 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 };
出错

这是查找法,不是排序法,二分查找主要是查找其元素对应的位置,如果排序了,就不是原本的位置了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

使用道具 举报

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


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

真的做多了,往往忽略了最简单,最基本的东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

所以二分查找只适用于有序数组查找吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 20:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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