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

公司的做网站下载app软件到手机

公司的做网站,下载app软件到手机,设计网页的目的,百度搜索营销大家好#xff01;上篇文章#xff08;c语言进阶部分详解#xff08;指针进阶2#xff09;_总之就是非常唔姆的博客-CSDN博客#xff09;我已经对回调函数进行了初步的讲解和一个简单的使用事例#xff0c;鉴于篇幅有限没有进行更加详细的解释#xff0c;今天便来补上。…大家好上篇文章c语言进阶部分详解指针进阶2_总之就是非常唔姆的博客-CSDN博客我已经对回调函数进行了初步的讲解和一个简单的使用事例鉴于篇幅有限没有进行更加详细的解释今天便来补上。 目录 一.回调函数的含义 二.qsort(函数  1.讲解  2.实例 三.利用冒泡排序来模拟qsort 1.main函数 2.bubble_qsort() 3.cmp 4.swap 总代码 一.回调函数的含义 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针地址作为参数传递给另一个函数当这个指针被用来调用其所指向的函数时我们就说这是回调函数。回调函数不是由该函数的实现方直接调用而是在特定的事件或条件发生时由另外的一方调用的用于对该事件或条件进行响应  二.qsort(函数  1.讲解  根据cplusplus网址给出的 翻译这就来了 qsort函数是C语言标准库中的一个函数用于对数组进行快速排序。它的完整声明如下 void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); qsort函数接受四个参数 base指向要排序数组的首元素的指针。nmemb表示数组中元素的个数。size表示每个元素的大小以字节为单位。compar指向一个用于比较两个元素的回调函数的指针 回调函数compar用于比较两个元素的大小关系。它接受两个参数分别是指向要比较的元素的指针。回调函数应该返回一个整数值表示两个元素的大小关系。如果返回负数则表示第一个元素小于第二个元素如果返回正数则表示第一个元素大于第二个元素如果返回零则表示两个元素相等。 一般这个回调函数是需要我们自己来写的: //升序排序 针对整型的排序 int compare (const void * a, const void * b){return ( *(int*)a - *(int*)b );}//降序排列int compare (const void * a, const void * b){return ( *(int*)b - *(int*)a );} 2.实例 对整型数组排序 int compare(const void *a, const void *b) {return (*(int*)a - *(int*)b); }int main() {int arr[] {5, 3, 8, 2, 1, 4};int size sizeof(arr) / sizeof(arr[0]);qsort(arr, size, sizeof(int), compare);for (int i 0; i size; i) {printf(%d , arr[i]);}return 0; } 同时我们也可以对其他数据类型进行排序下面便是对结构体进行排序 struct Student{char name[20];int score; } ;int compare(const void* a, const void* b) {return ((struct Student*)a)-score - ((struct Student*)b)-score; }int main() {struct Student students[] {{Alice, 85},{Bob, 92},{Charlie, 78},{David, 80},{Eva, 88}};int size sizeof(students) / sizeof(students[0]);qsort(students, size, sizeof(struct Student), compare);printf(按照成绩排序后的学生列表\n);for (int i 0; i size; i) {printf(姓名%s成绩%d\n, students[i].name, students[i].score);}return 0; } 三.利用冒泡排序来模拟qsort 1.main函数 这里main只是进行了最为基本的一些处理接下来进入bubble_qsort()函数  int main() {int arr[] { 10,9,8,7,6,5,4,3,2,1 }; //定义整型数组并初始化int sz sizeof(arr) / sizeof(arr[0]); //计算数组长度int i 0;bubble_sort(arr, sz, sizeof(arr[0]), cmp); //模拟qsort函数实现冒泡排序for (i 0; i sz; i) {printf(%d , arr[i]); //排序完后对数组进行打印验证排序是否成功} } 2.bubble_qsort() 冒泡排序函数bubble_sort它接受四个参数要排序的数组arr、数组的长度sz、每个元素的大小width和比较函数cmp。冒泡排序函数使用两层循环来实现冒泡排序的过程。外层循环控制冒泡排序的趟数内层循环遍历每一趟需要比较的元素对。在每一趟冒泡排序中如果比较函数返回的结果大于0则交换相邻的两个元素将较大的元素向后移动 我们可以看到形参的类型是 void* arr 此类型可接受任何类型指针我们会把需要比较的参数传递给比较函数cmp 第一个是(char*)arr (j * width)  我们先把void*强转为char*再加上j*widthwidth是每个元素的大小j*width就是需要加上的字节数所以(char*)arr (j * width)就是第j个元素的第一个字节的地址 void bubble_sort(void* arr, int sz, int width, int(*cmp)(void* e1, void* e2)) {int i 0;int j 0;for (i 0; i sz - 1; i){//冒泡排序趟数for (j 0; j sz - 1 - i; j) //每一趟冒泡排序{if (cmp((char*)arr (j * width), (char*)arr (j 1) * width)0){//符合条件进行交换swap((char*)arr (j * width), (char*)arr (j 1) * width,width);}}} } 3.cmp 虽然传递过来的是char*类型的指针但是我们经过强制转换之后访问的还是四个字节  int cmp(void* e1, void* e2) //所选择的比较方法 {return *((int*)e1) - *((int*)e2); } 4.swap 函数的参数包括两个指针p1和p2分别指向需要交换的两个元素以及一个整数width表示每个元素的大小。 在函数内部我们使用一个临时变量t来保存交换过程中的临时值。然后使用一个循环遍历每个字节将两个元素逐个字节地交换位置 void swap(char* p1, char* p2, int width) //实现数组元素的交换 {int t 0;int i 0;for (i 0; i width; i){t *p1;*p1 *p2;*p2 t;p1;p2;} } 原码 #includestdio.h//仿qsort函数重写冒泡排序 int cmp(void* e1, void* e2) //所选择的比较方法 {return *((int*)e1) - *((int*)e2); } void swap(char* p1, char* p2, int width) //实现数组元素的交换 {int t 0;int i 0;for (i 0; i width; i){t *p1;*p1 *p2;*p2 t;p1;p2;} } void bubble_sort(void* arr, int sz, int width, int(*cmp)(void* e1, void* e2)) {int i 0;int j 0;for (i 0; i sz - 1; i){//冒泡排序趟数for (j 0; j sz - 1 - i; j) //每一趟冒泡排序{if (cmp((char*)arr (j * width), (char*)arr (j 1) * width)0){//符合条件进行交换swap((char*)arr (j * width), (char*)arr (j 1) * width,width);}}} } int main() {int arr[] { 10,9,8,7,6,5,4,3,2,1 }; //定义整型数组并初始化int sz sizeof(arr) / sizeof(arr[0]); //计算数组长度int i 0;bubble_sort(arr, sz, sizeof(arr[0]), cmp); //模拟qsort函数实现冒泡排序for (i 0; i sz; i) {printf(%d , arr[i]); //排序完后对数组进行打印验证排序是否成功} } 当然此模拟方法依然有很多缺点 冒泡排序虽然简单但是效率低逐个字节地交换位置适用于任意类型的元素不受元素类型和大小的限制。但是它的缺点是效率较低 以后希望我在学到新知识后能进行相应改善。
http://www.w-s-a.com/news/633225/

相关文章:

  • 公司宣传 如何做公司网站郑州做网站那
  • 衡阳市城乡建设协会官方网站免费游戏网站模板
  • 小程序怎么做优惠券网站合肥建站网站平台
  • 民制作网站价格株洲企业seo优化
  • 网站建设 岗位职责网站建设百度索引
  • 网站建设的内容下拉网站导航用ps怎么做
  • 怎样做p2p网站海口免费自助建站模板
  • 给企业建设网站的流程图wordpress 添加子菜单
  • 企业网站带新闻发布功能的建站皋兰县建设局网站
  • 国内外做gif的网站wordpress数据库教程
  • 成都建站平台自己做一个网站需要多少钱
  • 景区旅游网站平台建设公司企业网站源码
  • 免费高清网站推荐喂来苏州网络科技有限公司
  • php做的大型网站有哪些备案博客域名做视频网站会怎么样
  • 去哪网站备案吗昭通网站建设
  • flash企业网站源码建筑材料采购网站
  • 网站可以换虚拟主机吗部门做网站优点
  • 如何做分类网站信息营销莱芜网页定制
  • 班级网站建设感想中国做视频网站有哪些
  • 做刷票的网站wordpress图片链接插件
  • 给客户做网站图片侵权沈阳做网站的地方
  • 网站开发步骤规划蓝天云免费空间主机
  • 网站字体规范wordpress找不到页面内容编辑
  • 静态网站建设参考文献茂名营销型网站制作公司
  • 君山区建设局网站风铃微网站怎么做
  • 购物网站销售管理合肥网络推广平台
  • 网站建设规划书txt微盘注册帐号
  • 小说网站开发实训报告企业网盘收费标准
  • mvc网站开发医疗医院网站建设
  • 天津市建设厅官方网站wordpress设置404