在stm32开发可以调用c标准库的排序和查找 qsort bsearch_stm32 qsort调用-程序员宅基地

技术标签: C/C++  嵌入式/stm32  

在嵌入式开发中,可以使用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:

 
int compar (const void* p1, const void* p2);
 


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
2
3
4
5
6
int compareMyType (const void * a, const void * b)
{
  if ( *(MyType*)a <  *(MyType*)b ) return -1;
  if ( *(MyType*)a == *(MyType*)b ) return 0;
  if ( *(MyType*)a >  *(MyType*)b ) return 1;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liming0931/article/details/100172641

智能推荐

数据存储之SQLite 数据库存储——第一行代码Android学习笔记_第一行代码sqliteopenhelper-程序员宅基地

文章浏览阅读1.3k次。SQLite 是一款轻量级的关系型数据库, 它的运算速度非常快,占用资源很少。存储大量复杂的关系型数据的时候使用。一、创建数据库SQLiteOpenHelper帮助类, 借助这个类就可以非常简单地对数据库进行创建和升级。SQLiteOpenHelper 中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分_第一行代码sqliteopenhelper

JavaScript同步与异步_js放入定时任务中 是异步吗-程序员宅基地

文章浏览阅读951次,点赞4次,收藏13次。JavaScript的运行机制运行栈JavaScript的执行环境是 单线程 的,所谓单线程,就是每次都只能做一件事,后面的事必须等前面的执行完才可以进行。console.log(1);console.log(2);console.log(3);console.log(4);// 1, 2, 3, 4但是这有一个弊端,如果中途遇到某个操作长时间无法执行完成,那么后面的任务就必须排队等待,这严重影响了整个执行过程,会导致浏览器无响应。为了解决这个问题,JavaScript将任务分为了 ._js放入定时任务中 是异步吗

Qt>常见的容器汇总:QByteArry,QObject_qbytearry属于qobject 数据类型不-程序员宅基地

文章浏览阅读283次。Qt常见模板汇总QByteArray,在串口通讯中经常被使用_qbytearry属于qobject 数据类型不

pandas(3)缺失值重复值以及时间类型的处理_pandas 根据日期回补数据-程序员宅基地

文章浏览阅读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 根据日期回补数据

C语言——白盒测试_c语言白盒测试方法-程序员宅基地

文章浏览阅读2.8w次,点赞12次,收藏34次。测试C语言部分代码_c语言白盒测试方法

随便推点

关于这几天使用IOS的ASYNCSOCKET完成无限后台的过程_ios gcdasyncsocket 进入后台运行-程序员宅基地

文章浏览阅读1k次。这几天用了下ASyncSocket完成前后台即时通讯,当时有想过用消息推送的技术实现的,可是后来想到消息推送的不可靠性还是算了。于是使用了tcp/ip实现后台主动发送数据给前台的功能。最开始设计后台的时候,我有考虑到数据量比较大的问题,所以数据大的时候我会使用分包和组包的功能去实现。TCP/IP在传输数据的时候,一般不会大于1500字节,所以我每512字节分了一个包。然后当一次性数_ios gcdasyncsocket 进入后台运行

linux注册表+快捷健+tracker_linux 系统注册表位置-程序员宅基地

文章浏览阅读1.4k次。今天没事,把以前零零散散的从网上学的知识或是技巧整理一下,以防时间长了忘了。做的是另一类工作,真的没多少时间学习linux相关的东西了......==============================================1.gconf-editor ----->linux下的注册表,可以修改一些东西,并定义快捷键2.Linux下的快捷键(这个可以在ubuntu的系统-->首选项_linux 系统注册表位置

安卓之读取raw文件夹下得txt文件_android studio raw 文本-程序员宅基地

文章浏览阅读4.7k次,点赞2次,收藏7次。Demo:读取res/raw下存放的一个text文件_android studio raw 文本

风云变幻,且看HiWork如何帮助团队更好地解决异地沟通问题!_hiwork电脑版-程序员宅基地

文章浏览阅读979次。HiWork 是基于云存储的团队即时沟通协作平台,可以根据项目、话题甚至兴趣等建立话题组,沟通记录以及共享文件永久云端保存。新加入的团队成员能够看到团队成员的沟通历史及文件共享信息。通过电脑及手机端都可以随时随地进行沟通以及沟通历史记录查看,会对整个项目的过程以及目前所处阶段有一个全面细致地了解,这样置身于可以随时随地了解沟通上下文的环境中,有效避免了产生理解偏差或沟通准确度递减问题。_hiwork电脑版

scrapy存储到MySQL数据库_使用scrapy爬取的数据存储到mysql数据库基本操作-程序员宅基地

文章浏览阅读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数据库基本操作

Pr 入门系列之四:编辑(基础篇)-程序员宅基地

文章浏览阅读1k次。视频剪辑工作主要在时间轴面板里进行。熟悉时间轴面板上的控件、熟练使用各种工具和方法,是顺利完成视频编辑工作的基础。有关时间轴面板的构成及各控件的说明,请参阅:《Pr:时间轴面板》◆◆◆播放与定位播放指示器Playhead,俗称播放头,也称时间指示器。与源面板上的操作方式基本一致,包括一些特殊的播放方式,比如,使用快捷键Shift+K可回放播放指示器的邻近区域Play Aroun..._帧定格选项中的定格滤镜 源时间码有播放指示器的区别

推荐文章

热门文章

相关标签