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

青浦华新网站建设明天上海封控16个区

青浦华新网站建设,明天上海封控16个区,网件路由器怎么设置,山东病毒感染最新qsort qsort 是 C 标准库中的一个通用排序函数&#xff0c;位于 <stdlib.h> 头文件中。它可以对任意类型的数组进行排序&#xff0c;使用的是快速排序&#xff08;Quick Sort&#xff09;算法的变种。 参数说明 base&#xff1a;指向要排序的数组的第一个元素的指针。由…

qsort

qsort 是 C 标准库中的一个通用排序函数,位于 <stdlib.h> 头文件中。它可以对任意类型的数组进行排序,使用的是快速排序(Quick Sort)算法的变种。
在这里插入图片描述
参数说明
base:指向要排序的数组的第一个元素的指针。由于是 void* 类型,所以可以指向任意类型的数组。
num:数组中元素的个数。
size:每个元素的大小(以字节为单位)。
compar:一个指向比较函数的指针,该比较函数用于确定元素之间的顺序。比较函数的原型必须是 int (*compar)(const void *, const void *)。

比较函数介绍
比较函数的具体比较方式,需要由使用人自己去实现.
其必须接受两个参数类型为const void*的参数,返回类型为int型
其比较原理在c++官网上可以查到,如下:
在这里插入图片描述
如果返回值小于 0,表示第一个参数所指向的元素小于第二个参数所指向的元素。
如果返回值等于 0,表示两个元素相等。
如果返回值大于 0,表示第一个参数所指向的元素大于第二个参数所指向的元素。
使用示例
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct stu
{char name[20];int age;
};
//以结构体中名字大小为依据进行排序
int cmp_stu_name(const void* e1, const void* e2)
{//比较字符串大小用strcmp函数//将e1,e2强转类型进行比较//因为strcmp比较完后返回的结果与比较函数所需返回大小一致,所以可以直接返回strcmp比较完所得值return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}int main()
{struct stu arr[] = { {"zhangsan",18},{"wangwu",20} };//定义两个结构体变量,用于测试qsort函数int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_stu_name);for(int i = 0;i<sz;i++)printf("%s %d", arr[i].name, arr[i].age);return 0;
}

自我实现

qsort函数可以通过类似于冒泡排序的方式实现;

#include<stdio.h>
#include<string.h>
struct stu
{char name[20];int age;
};
//比较函数的自我实现,通过strcmp来比较name大小
int cmp_stu_name(const void* e1, const void* e2)
{return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}
void swap(void* p1, void* p2, int size)
{//由于类型未知,所以将传过来的数据对应的字节一一调换for (int i = 0;i < size;i++){char tmp = *((char*)p1 + i);*((char*)p1 + i) = *((char*)p2 + i);*((char*)p2 + i) = tmp;}
}
//width为传过来参数的大小  cmp为回调函数
void bubble_sort(void* base, int num, int width, int (*cmp) (void* e1, void* e2))
{//调用cmp_stu_name函数,如果返回值大于0,则交换顺序int i = 0;int j = 0;for (i = 0;i < num;i++){int flag = 1;//如果顺序调换,则数组还是乱序,值改为0;反正有序退出循环for (j = 0;j < num;j++){//为了能够比较任意类型的数据,将base强转为char*类型进行比较if ((cmp((char*)base + j * width, (char*)base + (j + 1) * width)) > 0){swap((char*)base + j * width, (char*)base + (j + 1) * width,width);}}}
}void test()
{struct stu arr[] = { {"zhangsan",18},{"lisi",20} };int sz = sizeof(arr) / sizeof(arr[0]);//模仿qsort函数的参数bubble_sort(arr, sz, sizeof(arr[0]), cmp_stu_name);for(int i = 0;i<sz;i++)printf("%s %d\n", arr[i].name, arr[i].age);
}int main()
{test();return 0;
}

比较函数与qsort处同理;在此具体要实现的是qsort的内部原理,要注意的是由于使用者传来的数据是未知的,所以要转为char*类型的数据,通过width宽度来找到数据,从而进行交换

http://www.dtcms.com/wzjs/237267.html

相关文章:

  • 中山市 有限公司网站建设推广关键词
  • 非小号是根据国外哪个网站做的整站多关键词优化
  • 做网站用虚拟主机还是用服务器网站名称查询
  • 宁波梅山建设局网站今日热点头条新闻
  • app开发做网站腾讯广告平台
  • 网站备案账号是什么样的新闻热点
  • 做论坛网站时应该注意什么微营销
  • 动漫设计与制作行业厦门seo公司到1火星
  • 企业网站建设是什么郴州seo网络优化
  • 网站悬浮广告代码浏览器老是出现站长工具
  • 湖北民族建设集团网站首页友情链接交换网
  • 电脑自带的做网站叫什么软件免费收录网站提交
  • 可以做查询功能的网站seo搜索引擎入门教程
  • 网站建设公司如何发展短视频赚钱app软件
  • 泉做网站的公司企业邮箱怎么申请
  • 网站原型设计流程搜索引擎网站推广如何优化
  • 建设银行个人网站官网app注册推广团队
  • 网站开发工具特点总结广东东莞今日最新消息
  • 福州网站制作建设云南seo公司
  • 电子商务与网站建设论文网站建设公司地址在哪
  • 做鞋的网站优化大师班级优化大师
  • 机关网站建设和运行情况汇报小说关键词提取软件
  • 动态网站设计的目的百度投诉热线中心客服
  • 成都企业网站制作哪家好宁波seo推广外包公司
  • 中国建设银行网站暑假工报名买转发链接
  • 上海 网站开发 工作室长春网站优化页面
  • 如何使用表格做网站如何自己开网站
  • 邯郸做移动网站多少钱市场调研分析
  • 广东两学一做网站深圳市龙华区
  • 天津外包加工网seo网站排名查询