C 语言中用bsearch()实现查找操作

C语言中可以用bsearch()实现二分查找。同qsort()一样,bsearch()也包含在库中,且同样要自定义比较子函数。其原型如下:

void *bsearch(const void *key, const void *base, size_t nmem, size_t size, int (*comp)(const void *, const void *));

头文件:#include<stdlib.h>

key指向所要查找的元素,base指向进行查找的数组,nmem为查找长度,一般为数组长度,size为每个元素所占的字节数,一般用sizeof(...)表示,comp指向比较子函数,它定义比较的规则。需要注意的是,数据必须是经过预先排序的,而排序的规则要和comp所指向比较子函数的规则相同。如果查找成功则返回数组中匹配元素的地址,反之则返回空。对于有多于一个的元素匹配成功的情况,bsearch()未定义返回哪一个。

例:

#include <stdio.h>
#include <stdlib.h>

#define NUM 8

int compare(const void *p, const void *q)
{
    return (*(int *)p - *(int *)q);
}

int main(int argc, char *argv[])
{
    int array[NUM] = {9, 2, 7, 11, 3, 87, 34, 6};
    int key = 3;
    int *p;

    qsort(array, NUM, sizeof(int), compare);
    p = (int *)bsearch(&key, array, NUM, sizeof(int), compare);

    (p == NULL) ? puts("not found") : puts("found");

    return 0;
}

结果如下:found

时间: 2024-10-28 15:08:11

C 语言中用bsearch()实现查找操作的相关文章

Excel 中用 VBA 字典查找代替 VLOOKUP

从上一篇<PYTHON操作EXCEL>可以看到,Python 操作 Excel 已非常自如方便.但是 Python 和相关库毕竟是一个额外的依赖,若能从 Excel 自身解决此类问题,自然是更为易用. 1. VBA 中的哈希表 用 Python 的着眼点主要是 VLOOKUP 公式太慢了,所以关键是要找到一种更高效的算法或数据结构定位数据.VLOOKUP 要求对列进行排序,内部应该是对列内数据进行二分查找,算法上不好再优化了,那就只好更换一种数据结构.搜索了一下,VBA 提供了 Scripti

【Go语言】集合与文件操作

本文目录 1.数据集合的主要操作 1_1.字典的声明 1_2.字典的初始化和创建 1_3.字典的访问和操作 1_4.其他类型的数据集 2.文件操作 2_1.文件操作概述os包和path包 2_2.文件操作示例 目录操作: 打开与建立文件: 写文件 : 读文件: 删除文件: 回到顶部 1.集合以及主要操作 首先要提到的是Go语言的内置数据类型map(字典类型 类似于Java中的HashMap和Swift中的Directory),这样你无需导入任何包便可 使用map类型了.map是一种特殊的数据结构

VB语言使用ADO连接、操作SQLServer数据库教程

VB语言使用ADO连接.操作SQLServer数据库教程 这篇文章主要介绍了VB语言使用ADO连接.操作SQLServer数据库教程,本文讲解详细.代码中有大量注释,是非常好的一篇教程,需要的朋友可以参考下 几年前学过的VB几乎忘光了,这几天复习了下.VB连接ADO数据库并不是非常难. 连接第一步(要仔细看) 对于小白来讲,这里的教程最详细,连接ADO数据库第一步,要添加什么部件呢?全称是Microsoft ADO Data Control 6.0 (SP6) (OLEDB) 部件. 在Micr

C 语言中有趣第指针操作(转)

http://blog.csdn.net/ghevinn/article/details/37651149(反汇编题目需要分析) 4.取出内存区域的值 在取某内存地址开始的一个区域的值的时候,取出的值取决于用来取值的类型,譬如int为4个byte,char为1个byte,程序如: void main(){ int a[2] = {261,0}; int *pi = a; char *p = (char*)pi; cout << *(int *)p++ << endl;  //取出p

C语言实现对文本文件的操作

这几天做东西用到了文件的读取简单的整理了下 需要的头文件是:#include <stdio.h> 1.需要打开文件:用fopen_s(FILE ** _File,const char * _Filename,const char * _Mode);也可以用fopen函数参数类型一样,fopen_s比fopen多了些安全机制,后面的函数都可以使用 函数_s,eg:fprintf_s(FILE * _File, const char * _Format, ...); 2.写入数据到文件:fprin

excle查找操作-vlookup的使用心得

百度了一下vlookup的语法规则: 该函数的语法规则如下: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 参数 简单说明 输入数据类型 lookup_value 要查找的值 数值.引用或文本字符串 table_array 要查找的区域 数据表区域 col_index_num 返回数据在区域的第几列数 正整数 range_lookup 模糊匹配 TRUE(或不填) /FALSE range_lookup最好填入false

C语言对mysql数据库的操作

原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎么使用而进行查阅的! 我们言归正传 1.头文件: #include <stdio.h> #include <stdlib.h> #include <mysql/mysql.h> //这个是必需要包含的,下面对mysql的所有操作函数,都出自这里 2.定义一个MYSQL变量: MYSQL mysql: 这里

数据库查找操作-java

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SqlDemo { public static void main(String[] args) { try { //1.载入驱动程序 //驱动程序名称: com.mysql.jdbc.D

C语言学习_三分查找

三分查找: #include <stdio.h> #define M 10 int main(void) { int front, near, mid1, mid2; int n; int found; int a[M] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; front = 0; near = M - 1; found = 0; printf("input n:"); scanf("%d", &n); while(fron