热门标签 | 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;
在这里插入图片描述


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文探讨了2012年4月期间,淘宝在技术架构上的关键数据和发展历程。涵盖了从早期PHP到Java的转型,以及在分布式计算、存储和网络流量管理方面的创新。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文探讨了高质量C/C++编程的最佳实践,并详细分析了常见的内存错误及其解决方案。通过深入理解内存管理和故障排除技巧,开发者可以编写更健壮的程序。 ... [详细]
  • 本文详细探讨了 Django 的 ORM(对象关系映射)机制,重点介绍了其如何通过 Python 元类技术实现数据库表与 Python 类的映射。此外,文章还分析了 Django 中各种字段类型的继承结构及其与数据库数据类型的对应关系。 ... [详细]
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
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社区 版权所有