当前位置: 首页 > news >正文

白银网站网站建设周口市公共资源交易中心

白银网站网站建设,周口市公共资源交易中心,石家庄网站建设成功案例,柳州门户网站建设公司排名主页#xff1a;17_Kevin-CSDN博客 专栏#xff1a;《C语言》 本文将从回调函数#xff0c;qsort函数的应用#xff0c;qsort函数的实现原理三个方面进行讲解#xff0c;请自行跳转至相对位置进行阅读~ 目录 回调函数 qsort函数的应用 qsort函数实现原理 回调函数 什… 主页17_Kevin-CSDN博客 专栏《C语言》 本文将从回调函数qsort函数的应用qsort函数的实现原理三个方面进行讲解请自行跳转至相对位置进行阅读~  目录 回调函数 qsort函数的应用 qsort函数实现原理 回调函数 什么是回调函数 回调函数实际上是一个指针指向的是一个函数。它作为一个参数传递给另一个函数并且在特定的条件下被执行。 回调函数的作用 回调函数的主要作用是使代码更加灵活和模块化。通过使用回调函数我们可以将特定的行为或逻辑与原始函数分离开来这样可以让我们更容易地进行代码重用和维护。 回调函数的实现 定义一个函数然后将其作为参数传递给其他函数在特定条件下执行 回调函数的示例 让我们以 C 语言为例来看一个简单的回调函数示例 #include stdio.hvoid performOperation(int a, int b, int (*callback)(int, int)) {int result callback(a, b);printf(The result is: %d\n, result); }int add(int a, int b) {return a b; }int main() {int x 10, y 20;performOperation(x, y, add); // 传递 add 函数作为回调函数return 0; }在这个示例中performOperation 函数接受两个整数和一个函数指针作为参数然后在内部调用传递进来的函数指针实现了加法运算。在主函数中我们将 add 函数作为回调函数传递给 performOperation 函数。这就是一个简单的回调函数的例子。 qsort函数的应用 函数定义 在官方文档中qsort的函数定义如下 void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*)); 函数参数的剖析 base 参数base是一个void* 类型的qsor使用来排序的函数该参数就是传入的要进行排序的数组。作为一个void*类型的指针我们传入数组的地址即可完成对要排序数组的传入。 num 该参数位置要传入的是要进行排序的数组的元素个数一般使用sizeof数组名/ sizeof数组中的任意元素进行计算得到个数。 size 参数size传入的参数是数组中单个元素的大小该参数可以确保在函数内排序的时候每次跳跃的字节大小是一个元素的字节的大小。 compar: 该参数是一个函数指针指向比较两个元素的函数。 qsort内部会反复调用此函数来比较两个元素以此来决定排序方向。 请注意在传入该参数的时候请严格按照该参数的规范结构来书写。 int (*compar)(const void*,const void*) 为什么要用void* 这是因为 qsort 函数可以对任意类型的数组进行排序而不同类型的数据可能需要不同的比较方法。使用 void* 类型作为参数可以让比较函数更加通用因为 void* 是一种无类型指针可以指向任何类型的数据。在比较函数内部我们可以将 void* 类型的指针转换为实际的数据类型再进行比较强制类型转化。 通过使用 void* 类型可以在不知道具体数据类型的情况下编写通用的比较函数使 qsort 函数更加灵活和通用。在比较函数中我们需要负责将 void* 类型的指针转换为实际的数据类型并进行比较操作。 使用 void* 类型的参数可以使比较函数更加通用适用于不同类型的数据从而增强了函数的灵活性和通用性。 经典代码示例 #include stdio.h #include stdlib.h// 比较函数用于升序排序 int compare(const void *a, const void *b) {return (*(int*)a - *(int*)b); }int main() {int arr[] {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};int n sizeof(arr) / sizeof(arr[0]);// 使用 qsort 对数组进行排序qsort(arr, n, sizeof(int), compare);printf(Sorted array: );for (int i 0; i n; i) {printf(%d , arr[i]);}printf(\n);return 0; }在这个示例中首先定义了一个整型数组 arr然后通过 qsort 函数对数组进行排序。在 main 函数中我们计算数组的大小 n然后调用 qsort 函数传入数组、数组大小、每个元素的大小以及比较函数 compare。比较函数 compare 中我们将 void* 类型的指针转换为 int* 类型并进行升序排序。最终得到的就是升序排序的数组了。 qsort函数实现原理 详细定义 qsort 函数是一个用于快速排序Quick Sort的标准库函数。它接受一个数组和一个比较函数作为参数并对数组进行排序。快速排序是一种分治的排序算法通过选择一个基准元素将数组分为两部分一部分比基准元素小一部分比基准元素大然后对这两部分递归地进行排序最终得到一个有序的数组。 实现原理 选择基准元素qsort 函数首先选择数组中的一个元素作为基准元素。通常情况下可以选择数组的第一个元素作为基准元素。 分区Partitionqsort 函数使用选定的基准元素将数组分为两部分一部分小于等于基准元素另一部分大于基准元素。这个过程称为分区。 递归排序qsort 函数递归地对小于等于基准元素和大于基准元素的两部分进行排序。它分别对这两部分调用 qsort 函数并将相应的比较函数传递给子函数。 合并结果最后qsort 函数将排序后的两部分合并起来形成一个有序的数组。 模拟实现sort 以下代码使用C语言模拟实现qsort函数的代码 #include stdio.hvoid swap(int* a, int* b) {int temp *a;*a *b;*b temp; }int partition(int arr[], int low, int high) {int pivot arr[high];int i low - 1;for (int j low; j high - 1; j) {if (arr[j] pivot) {i;swap(arr[i], arr[j]);}}swap(arr[i 1], arr[high]);return i 1; }void quickSort(int arr[], int low, int high) {if (low high) {int pi partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi 1, high);} }void myQsort(int arr[], int n) {quickSort(arr, 0, n - 1); }int main() {int arr[] {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};int n sizeof(arr) / sizeof(arr[0]);myQsort(arr, n);printf(Sorted array: );for (int i 0; i n; i) {printf(%d , arr[i]);}printf(\n);return 0; }这是一个以快速排序为基础的qsort函数实现通过选择一个基准元素并将数组分成两部分使得左边的元素都小于或等于基准元素而右边的元素都大于基准元素然后对左右两部分递归地进行排序最终得到一个有序的数组。 以下是各个函数的分解解析 swap 函数这个函数用于交换两个整数的值。它接受两个整数指针作为参数并使用 temp 变量来暂存其中一个整数的值然后将两个整数的值进行交换。partition 函数这个函数用于将一个数组的某个子数组分成两部分使得左边的元素都小于或等于基准元素而右边的元素都大于基准元素。它接受一个整数数组、子数组的起始索引和结束索引作为参数。首先它选择最后一个元素作为基准元素并将 i 初始化为 low - 1。然后它使用一个循环从 low 到 high - 1 遍历数组如果当前元素小于基准元素就将 i 向右移动一个位置并将当前元素和 arr[i] 进行交换。最后它将基准元素和 arr[i 1] 进行交换使得基准元素位于正确的位置上。quickSort 函数这个函数用于对一个数组进行快速排序。它接受一个整数数组和起始索引和结束索引作为参数。如果起始索引小于结束索引它就调用 partition 函数将数组分成两部分并对左右两部分递归地进行排序。myQsort 函数这个函数是一个封装的快速排序函数它接受一个整数数组和数组的大小作为参数并调用 quickSort 函数对数组进行排序。main 函数这个函数是程序的入口函数。它首先定义了一个整数数组 arr并计算数组的大小。然后它调用 myQsort 函数对数组进行排序并打印排序后的结果。 本篇博客到此就结束啦~ 如果有帮助到您的学习是我的无上荣幸 感谢阅读
http://www.zqtcl.cn/news/604715/

相关文章:

  • 国内做网站哪家公司好免费查找资料的网站
  • 自己做的网站百度搜不到搭建网站seo
  • 奇墙网站建设高端网站建设公司联系电话
  • 宁波那家公司做网站好中企动力科技股份有限公司招聘
  • 水果网站推广网站首页静态好还是动态好
  • iis网站属性小程序源码无需服务器
  • 景区网站建设材料代运营有哪些套路坑
  • 六安电商网站建设哪家好有关做美食的网站
  • 卸载wordpress插件网店seo关键词
  • 金山网站制作赤城seo网站优化排名
  • 提供坪山网站建设深圳商城网站哪家做的好
  • 有什么网站可以帮人做模具吗热搜榜百度一下你就知道
  • 深圳网站优化技巧邹城住房城乡建设部网站
  • 小型企业网站建站桂林市中考信息网官网
  • 雏鸟app网站推广做网站用宋体有版权问题吗
  • 建立网站数据库开公司流程及费用2022最新
  • 外贸谷歌网站推广wordpress调用上传图片
  • 360提示危险网站原因威海 网站开发
  • 赣州本地网站网站怎么写
  • 物业公司网站设计湛江做网站软件
  • 做招聘求职网站wordpress启用插件出错
  • 珠海网站运营网站个人备案流程
  • 网站开发用什么图片格式最好网络营销名词解释是什么
  • 做柜子网站老电脑做网站服务器
  • 域名购买网站网店装修是什么
  • wordpress 网站备份为什么企业要建设自己的企业文化
  • 想做一个部门的网站怎么做潍坊网站建设价
  • 网站建设公司的公司哪家好什么行业必须做网站
  • 电子商务网站前台设计wordpress 上传文件大小
  • 深圳市住房和城乡建设局网站非常好的资讯网站设计