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

一个旅游网站建设需求安徽省建设工程信息管理平台

一个旅游网站建设需求,安徽省建设工程信息管理平台,什么网站做adsense好,wordpress批量导入标签qsort使用举例 qsort是C语言中的一个标准库函数#xff0c;用于对数组或者其他数据结构中的元素进行排序。它的原型如下#xff1a; void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 我们可以去官网搜来看一看#xff1a;…qsort使用举例 qsort是C语言中的一个标准库函数用于对数组或者其他数据结构中的元素进行排序。它的原型如下 void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 我们可以去官网搜来看一看 那么对于其中的参数下面也有相应的英文解释 - base指向要排序的数组或数据结构的第一个元素的指针。 - nmemb要排序的元素的数量。 - size每个元素的大小以字节为单位。 - compar指向用于比较两个元素的函数的指针。 compar函数用于比较两个元素的大小关系返回值为整数表示两个元素的大小关系。具体返回值的含义如下 - 若返回值小于0则表示第一个元素小于第二个元素。 - 若返回值等于0则表示两个元素相等。 - 若返回值大于0则表示第一个元素大于第二个元素。 qsort函数根据compar函数的返回值对数组或数据结构中的元素进行排序可以按照升序或降序进行排序。 那么知道以上这些下面我们就来使用这个库函数首先我们以排序整型数组为例 int arr[10] { 4,5,7,6,3,2,8,9,1,10 }; 假设我们要排列以上的10个元素那么我们根据上面对于库函数qsort的认识需要向它传入四个参数那么第一个为- base指向要排序的数组或数据结构的第一个元素的指针那么就是我们的arr 了第二个为- nmemb要排序的元素的数量这是我们就要计算里面有多少个元素了我们可以这样算 int sz sizeof(arr) / sizeof(arr[0]); 使用第二个参数我们可以写为  sz ,第三个为- size每个元素的大小那么我们计算出数组中第一个元素有多少个字节就可以了 sizeof(arr[0]),最后一个为- compar指向用于比较两个元素的函数的指针这里我们就需要我们自己写一个函数了告诉这个库函数qsort我们要比较什么类型的数据 qsort(arr, sz, sizeof(arr[0]), cop_int); 那么接下来就是这个cop_int函数怎么写了因为我们不知道会传什么样的数据所以我们可以使用void*进行接收返回类型为int型因为下面是根据大于或小于或等于来排序的而且不希望改我们所要排序的数值所以我们这样写到 int cop_int(const void* p1, const void* p2) 上面传来了void*类型的数据而void*的数据不能够直接进行运算操作所以下面我们要进行强制类型转换作差看看两数的情况 return *(int*)p1 - *(int*)p2; 下面就来看看我们整体的代码 #include stdlib.h//头文件void Print_arr(int arr[], int sz) {for (int i 0; i sz; i){printf(%d , arr[i]);} }int cop_int(const void* p1, const void* p2) {return *(int*)p1 - *(int*)p2; }int main() {int arr[10] { 4,5,7,6,3,2,8,9,1,10 };int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cop_int);Print_arr(arr, sz);return 0; } 看看我们的运行效果 下面我们给结构体进行排序 我们先随便写一个结构体 struct Stu {char name[20];int age;int score; };//定义一个学生的名字岁数分数 我们只需要改我们的- compar指向用于比较两个元素的函数的指针我们先以学生的名字进行排序那么结构体我们只需要转换成结构体指针就可以进行比较了名字我们strcmp进行比较 #include stdlib.h//qsort的头文件 #include string.h//strcmp的头文件 struct Stu {char name[20];int age;int score; }; int cop_Stu_by_name(const void* p1, const void* p2) {return strcmp(((struct Stu*)p1)-name , ((struct Stu*)p2)-name); } int main() {struct Stu arr[] { {zhangsan,18,76},{lisi,28,65},{wangmazi,25,79}};int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cop_Stu_by_name);for (int i 0; i sz; i){printf(%s %d %d\n, arr[i].name, arr[i].age,arr[i].score);}return 0; } 看看运行的结果 是正确的哦我们还可以以年龄进行比较还有分数啊这里我就不排了我们下面用冒泡排序来qsort函数的模拟实现 qsort函数的模拟实现采用冒泡排序法 对于冒泡排序我在前面也写到过还不太清楚的小伙伴可以看看哦。 void BubbleSort(int arr[], int sz) {for (int i 0; i sz - 1; i)//趟数{for (int j 0; j sz - 1 - i; j)//一趟冒泡排序{if (arr[j] arr[j 1])//需要进行改造的地方 1{int tmp arr[j];// 需要进行改造的地方 2arr[j] arr[j 1];arr[j 1] tmp;}}} }int main() {int arr[] { 5,7,9,4,3,6,8,1 };//5 7 9 4 3 6 8 1int sz sizeof(arr) / sizeof(arr[0]);//计算有多少个元素BubbleSort(arr, sz);for (int i 0; i sz; i){printf(%d , arr[i]);}return 0; } 首先我们先来想一想那些地方需要我们改造对于循环那些我们是不是就不用改了那不会有影响。我们将会排序到不同的数据类型所以我们对于 if (arr[j] arr[j 1])的比较是不是需要我们进行改造呢还有下面的交换变量也是我们需要改的既然上面的类型都被改了下面也肯定是需要改的。 我们以结构体的年龄为例那么函数的参数还是我们上面的那样只是要改一下第四个参数 bubble_sort2(arr, sz, sizeof(arr[0]), cop_Stu_by_age); 接下来就是对于bubble_sort2函数的定义了下面传了四个参数那我们也要用四个参数进行接收了因为我们不知道传来的是什么类型的所以在设置类型上我们要考虑考虑第一个为地址我们用void*进行接受吧void*都装的了哈哈。第二个和第三个就用size_t了最后一个像我们上面考虑的那个样int (*cmp)(const void* p1, const void* p2)。 void bubble_sort2(void* base,size_t sz,size_t width, int (*cmp)(const void* p1, const void* p2)) {for (int i 0; i sz-1; i){for (int j 0; j sz-1-i; j){if (arr[j] arr[j 1]){int tmp arr[j];arr[j] arr[j 1];arr[j 1] tmp;}}} } 接着就是对于比较的改造了我们这里构造一个新的函数进行比较这样我们根据下面传来的类型去调用相应的那么我们怎样找到我们的对应的元素进行比较呢下面给给了我们首元素的地址和每个元素的大小我们是不是可以用起来呢我们根据j的变化去找到元素。但是还要想到我们要用它来不同数据类型的排序所以我们也要进行强制类型转换。我们强制转换成什么类型的数据呢是不是char*最为合适呢不管是什么类型我们都可以一个一个的去进行交换 if(cmp((char*)base j * width, (char*)base (j 1) * width) 0) 下面我们进行对于交换的改造上面改成了那样所以接收时也改成相应的就行了我们以前进行交换的时候是创建了第三个变量进行交换现在我们不知什么类型就需要改进了。强制转换成什么类型比较合适呢假设我们结构体的为7个字节大小那我们是不是用char类型就可以了不管你如何我一个一个的进行交换就都可以实现既然我们以这样的方式进行实现那我们是不是应该把它每个元素的大小传进来呢 void swap(char* a, char* b, size_t width) {for (int i 0; i width; i){char tmp *a;*a *b;*b tmp;a;b;} } 接下来我们就看看整体的代码 #define _CRT_SECURE_NO_WARNINGS 1 #include stdio.hstruct Stu {char name[20];int age; };int cop_Stu_by_age(const void* p1, const void* p2) {return ((struct Stu*)p1)-age - ((struct Stu*)p2)-age; }int cop_int(const void* p1, const void* p2) {return *(int*)p1 - *(int*)p2; }void PrintArr(int arr[], int sz) {for (int i 0; i sz; i){printf(%d , arr[i]);} }void swap(char* a, char* b, size_t width) {for (int i 0; i width; i){char tmp *a;*a *b;*b tmp;a;b;} }//冒泡排序 void bubble_sort2(void* base,size_t sz,size_t width, int (*cmp)(const void* p1, const void* p2)) {for (int i 0; i sz-1; i){for (int j 0; j sz-1-i; j){//if (arr[j] arr[j 1])if(cmp((char*)base j * width, (char*)base (j 1) * width) 0){swap((char*)base j * width, (char*)base (j 1) * width,width);/*int tmp arr[j];arr[j] arr[j 1];arr[j 1] tmp;*/}}} }int main() {struct Stu arr[] { {aihua,18},{zhanghong,21},{kiki,15} };int sz sizeof(arr) / sizeof(arr[0]);//年龄bubble_sort2(arr, sz, sizeof(arr[0]), cop_Stu_by_age);for (int i 0; i sz; i){printf(%s %d\n, arr[i].name, arr[i].age);}return 0; }看看运行结果 那么也是可以的哟,我这里就是用其他类型进行排序了感兴趣的话可以去试试哦本来还想着画图给你们梳理一下可那个画图工具不给力 愿你们冬不寒❤❤❤
http://www.tj-hxxt.cn/news/227772.html

相关文章:

  • 网站开发视频优设网网址
  • 深圳团购网站设计量力商务大厦网站建设
  • 机关网站建设和运行情况汇报学校网站开发需求
  • 织梦 网站统计寿光网站建设报价
  • 广东省建设监理协会网站 - 首页网络营销师考试内容
  • 建设网站服务器端环境要求重庆建站网站建设平台
  • 杭州外贸网站建设公司价格网站跳出率怎么计算
  • 上海网站建设推广服务企业网站cms模板
  • 360免费建站域名免费吗用狗做头像的网站
  • 网站开发建设方案书wordpress 商城 插件
  • 建设银行网站号公司网站设计广州
  • 网站链接结构网站开发环境有哪些php
  • 做网站好的网站建设公司wordpress更换主题影响
  • 杭州市富阳区建设局网站南安网络推广
  • 做网站开发的步骤遵义seo快速排名
  • 手机企业网站程序wordpress微信机器人下载地址
  • 专业广州网站设计百度短链接在线生成
  • 网站首页html代码在哪南昌集团制作网站设计
  • 鄢陵县北京网站建设韩韩良品只做性价比网站下载
  • 网站设计 价格中国制造网登录
  • 公司网站空间怎么续费河北邯郸天气预报
  • 网站空间和云主机wordpress google统计
  • iis添加网站无法访问沈阳建设企业网站
  • 免费做试卷的网站福永电子烟网站开发
  • 北京商地网站建设公司不用iis建立网站
  • 建站属于什么行业用来做网页的软件
  • 有哪些可以做推广的网站wordpress 自动 tag
  • 做网站接专线费用外籍人士在中国注册公司
  • mui做浏览器网站跳转济南 网站建设
  • 企业站网页制作实训步骤非遗网页设计作品欣赏