在嵌入式开发中,可以使用c标准库自带的库函数,而不用自己去早轮子,qsort 和bsearch就是其中的两个比较好用的
二分法查找,前提是已经排序好的数据。下面的代码, 如果数据为排序,则要进行排序后,再查找。
/* bsearch example */
#include <stdio.h> /* printf */
#include <stdlib.h> /* qsort, bsearch, NULL */
int compareints (const void *a, const void *b)
{
return ( *(int *)a - * (int *)b );
}
int values[] = { 50, 20, 60, 40, 10, 30 };
int main ()
{
int *pItem;
int key = 45;
qsort (values, 6, sizeof (int), compareints);
pItem = (int *) bsearch (&key, values, 6, sizeof (int), compareints);
if (pItem != NULL)
printf ("%d is in the array.\n", *pItem);
else
printf ("%d is not in the array.\n", key);
return 0;
}
快速排序
#include <stdio.h>
#include <stdlib.h>
int values[] = { 88, 56, 100, 2, 25 };
int cmpfunc (const void *a, const void *b)
{
return ( *(int *)a - * (int *)b ); //升序
//return ( *(int *)a - * (int *)b ); //降序
}
int main()
{
int n;
printf("排序之前的列表:\n");
for ( n = 0 ; n < 5; n++ )
{
printf("%d ", values[n]);
}
qsort(values, 5, sizeof(int), cmpfunc);
printf("\n排序之后的列表:\n");
for ( n = 0 ; n < 5; n++ )
{
printf("%d ", values[n]);
}
return (0);
}
比较函数需要特别注意~~~~
Pointer to a function that compares two elements.
This function is called repeatedly by qsort to compare two elements. It shall follow the following prototype:
|
|
Taking two pointers as arguments (both converted to const void*). The function defines the order of the elements by returning (in a stable and transitive manner):
return value | meaning |
---|---|
<0 |
The element pointed to by p1 goes before the element pointed to by p2 |
0 |
The element pointed to by p1 is equivalent to the element pointed to by p2 |
>0 |
The element pointed to by p1 goes after the element pointed to by p2 |
For types that can be compared using regular relational operators, a general compar function may look like:
|
|
文章浏览阅读1.3k次。SQLite 是一款轻量级的关系型数据库, 它的运算速度非常快,占用资源很少。存储大量复杂的关系型数据的时候使用。一、创建数据库SQLiteOpenHelper帮助类, 借助这个类就可以非常简单地对数据库进行创建和升级。SQLiteOpenHelper 中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分_第一行代码sqliteopenhelper
文章浏览阅读242次。HDU3068
文章浏览阅读951次,点赞4次,收藏13次。JavaScript的运行机制运行栈JavaScript的执行环境是 单线程 的,所谓单线程,就是每次都只能做一件事,后面的事必须等前面的执行完才可以进行。console.log(1);console.log(2);console.log(3);console.log(4);// 1, 2, 3, 4但是这有一个弊端,如果中途遇到某个操作长时间无法执行完成,那么后面的任务就必须排队等待,这严重影响了整个执行过程,会导致浏览器无响应。为了解决这个问题,JavaScript将任务分为了 ._js放入定时任务中 是异步吗
文章浏览阅读283次。Qt常见模板汇总QByteArray,在串口通讯中经常被使用_qbytearry属于qobject 数据类型不
文章浏览阅读1.7k次。1、缺失值的表现形式:不区分大小写 NAN nan NaN 都是空值2、怎么创建缺失值:None 或者np.nan3、pandas处理缺失值判断isnull()检测整张表中的缺失值的数据df.isnull().any(axis=1)判断哪行中有空值 因为是按列的数据统计的 所以axis=1df.isnull().any(axis=0)判断哪列中有空值。。df.notnull().all(axis=1)判断哪些行中有非空值。。df.notnull().all(axis=0)判断哪些列中有非空值_pandas 根据日期回补数据
文章浏览阅读2.8w次,点赞12次,收藏34次。测试C语言部分代码_c语言白盒测试方法
文章浏览阅读1k次。这几天用了下ASyncSocket完成前后台即时通讯,当时有想过用消息推送的技术实现的,可是后来想到消息推送的不可靠性还是算了。于是使用了tcp/ip实现后台主动发送数据给前台的功能。最开始设计后台的时候,我有考虑到数据量比较大的问题,所以数据大的时候我会使用分包和组包的功能去实现。TCP/IP在传输数据的时候,一般不会大于1500字节,所以我每512字节分了一个包。然后当一次性数_ios gcdasyncsocket 进入后台运行
文章浏览阅读1.4k次。今天没事,把以前零零散散的从网上学的知识或是技巧整理一下,以防时间长了忘了。做的是另一类工作,真的没多少时间学习linux相关的东西了......==============================================1.gconf-editor ----->linux下的注册表,可以修改一些东西,并定义快捷键2.Linux下的快捷键(这个可以在ubuntu的系统-->首选项_linux 系统注册表位置
文章浏览阅读4.7k次,点赞2次,收藏7次。Demo:读取res/raw下存放的一个text文件_android studio raw 文本
文章浏览阅读979次。HiWork 是基于云存储的团队即时沟通协作平台,可以根据项目、话题甚至兴趣等建立话题组,沟通记录以及共享文件永久云端保存。新加入的团队成员能够看到团队成员的沟通历史及文件共享信息。通过电脑及手机端都可以随时随地进行沟通以及沟通历史记录查看,会对整个项目的过程以及目前所处阶段有一个全面细致地了解,这样置身于可以随时随地了解沟通上下文的环境中,有效避免了产生理解偏差或沟通准确度递减问题。_hiwork电脑版
文章浏览阅读5.2k次。class MysqlPipeline(object): def __init__(self, host, database, user, password, port): self.host = host self.database = database self.user = user self.password = pa..._使用scrapy爬取的数据存储到mysql数据库基本操作
文章浏览阅读1k次。视频剪辑工作主要在时间轴面板里进行。熟悉时间轴面板上的控件、熟练使用各种工具和方法,是顺利完成视频编辑工作的基础。有关时间轴面板的构成及各控件的说明,请参阅:《Pr:时间轴面板》◆◆◆播放与定位播放指示器Playhead,俗称播放头,也称时间指示器。与源面板上的操作方式基本一致,包括一些特殊的播放方式,比如,使用快捷键Shift+K可回放播放指示器的邻近区域Play Aroun..._帧定格选项中的定格滤镜 源时间码有播放指示器的区别