热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言自带的快排和二分查找

Author🚹:CofCaiEmail✉️:cai.dongjunnexuslink.cnQQ😙:1664866311personalPage&#x

Author🚹:CofCai

Email✉️:cai.dongjun@nexuslink.cn

QQ😙:1664866311

personal Page🏠

CSDN Page🏠


抽时间再详细把C语言标准头文件(库文件)梳理一下。

对于快速排序和二分查找,其实在C语言中有相应的实现,在头文件中,重点是实现cmp函数,以及理解它内部如何运作的。下面贴出代码:

/*** author: CofCai* datatime: 2020-12-02 11:20:25* file description:* 该文件是在搜索C语言标准头文件时,发现在中有* 二分查找和快速排序的函数,所以遂研究以下。* 二分查找:* void *bsearch(const void *key, const void *base, size_t n, size_t size, int (*cmp)(const void *keyval, const void *datum));* 快速排序:* void qsort(void *base, size_t n, size_t size, int (*cmp)(const void *, const void *));* 重点是实现cmp函数,n是base的个数,size是base中每个元素的大小,cmp是对base元素进行操作的函数指针。*/#include
#include
#include void SortAndSearchStringEg();
void SortAndSearchNumEg();int main(int argc, char const *argv[])
{SortAndSearchStringEg();SortAndSearchNumEg();return 0;
}#define TYPE floatint cmp4num(const void* x, const void* y)
{TYPE a, b;a = *(TYPE*)x;b = *(TYPE*)y;if (a > b) return 1;else if (a == b) return 0;else return -1;
}void SortAndSearchNumEg()
{TYPE data[] &#61; {10, 18, 2, 83, 82, 892, 23};TYPE target &#61; 23;TYPE* get;printf("before quick sort:\n");for (int i &#61; 0; i < sizeof(data)/sizeof(TYPE); &#43;&#43;i){printf("%.f\n", data[i]);}qsort((void*)data, sizeof(data)/sizeof(TYPE), sizeof(TYPE), cmp4num);printf("after quick sort:\n");for (int i &#61; 0; i < sizeof(data)/sizeof(TYPE); &#43;&#43;i){printf("%.f\n", data[i]);}get &#61; (TYPE*)bsearch((void*)&target, (void*)data, sizeof(data)/sizeof(TYPE), sizeof(TYPE), cmp4num);if (get !&#61; NULL) {printf("find value %f\n", *get);} else {printf("can&#39;t find value %f\n", target);}
}int cmp4str(const void* x, const void* y)
{char* str1, *str2;str1 &#61; (char*)x;str2 &#61; (char*)y;return strncmp(str1, str2, sizeof(str1)); //升序// return -strncmp(str1, str2, sizeof(str1)); //降序
}#define M 6
#define N 10void SortAndSearchStringEg()
{char str[M][N] &#61; {"hello","name","cofcai","jackChen","bruceLi","shaby"};char* strtarget &#61; "hh";char* strfind;printf("before sort:\n");for (int i &#61; 0; i < M; &#43;&#43;i){printf("str[%d] is: %s\n", i, str[i]);}/** 快速排序 */qsort(str, sizeof(str)/(sizeof(char)*N), sizeof(char)*N, cmp4str);printf("after sort:\n");for (int i &#61; 0; i < M; &#43;&#43;i){printf("str[%d] is: %s\n", i, str[i]);}/** 二分查找 */strfind &#61; (char*)bsearch((const void*)strtarget, str, sizeof(str)/(sizeof(char)*N), sizeof(char)*N, cmp4str);if (strfind !&#61; NULL) {printf("find str: %s\n", strfind);} else {printf("don&#39;t find target str: %s\n", strtarget);}
}

结果如下&#xff1a;
在这里插入图片描述


推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
发的好地方
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有