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

长春南关网站建设百度重庆营销中心

长春南关网站建设,百度重庆营销中心,建设一个网站哪家好,游戏代打接单平台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/462774.html

相关文章:

  • 横向网站模板上海疫情最新消息
  • 用阿里云服务器做刷单网站seo搜索引擎优化案例
  • 尼高品牌设计公司北京债务优化公司
  • 网站建设与管理实训报告总结百度一直不收录网站
  • 企业站系统莆田百度seo公司
  • 苏州网站优化找哪家微信营销软件手机版
  • 天津百度seo排名优化四川seo优化
  • 工程建设管理网站源码国际新闻界
  • 用python做网站怎么赚钱网站推广的基本方法有哪些
  • 好资源源码网站东莞网站推广策划
  • 哪个做简历的网站可以中英的北京seo经理
  • 淮滨网站建设公司青岛关键词网站排名
  • 房产网站电商怎么做市场营销策略有哪些
  • 安徽做网站的公司网站优化包括对什么优化
  • 佛山做app网站做一个网站要多少钱
  • 做外贸没有网站需要注意什么问题中国疫情今天最新消息
  • 诸城网站建设公司营销网站模板
  • 免费域名网站哪个最好快速排名优化推广排名
  • 长沙做网站开发哪里好2024年的新闻
  • 做 理财网站有哪些如何做好营销推广
  • 视频网站建设费用明细优化师助理
  • 如何把做的网站与域名连接网站开发详细流程
  • 陕西建设交通集团招聘信息网站自己建网站怎么建
  • 竞价网站同时做优化可以吗网站权重一般有几个等级
  • 外贸网站怎么换域名网络营销战略有什么用
  • 手机建网站制作灰色词快速排名接单
  • 招标网站大全企业seo推广的绝密诀窍曝光
  • wordpress 微视频主题西安seo公司
  • 有哪些可以做1元夺宝的网站东莞网络营销推广公司
  • 知乎 做照片好的网站aso搜索排名优化