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

网站主机和空间建德营销型网站建设

网站主机和空间,建德营销型网站建设,百度收录网站有什么好处,软件外包平台的服务机构目录 1. 排序函数的参数 2. 排序函数函数体 2.1 比较元素的表示 2.2 交换函数Swap的实现 2.3 排序函数bubble_sort的实现 3. 测试整型数据排序 3.1 整型数据比较函数cmp_int的实现 3.2 整型数据排序后输出函数print_int的实现 3.3 整型数据测试函数test_int的实现 3…目录 1. 排序函数的参数 2. 排序函数函数体 2.1 比较元素的表示 2.2 交换函数Swap的实现 2.3 排序函数bubble_sort的实现 3. 测试整型数据排序 3.1 整型数据比较函数cmp_int的实现 3.2 整型数据排序后输出函数print_int的实现 3.3 整型数据测试函数test_int的实现  3.4 完整程序及运行结果  4. 测试结构体型数据排序 4.1 创建结构体型数据 4.2 结构体型数据比较函数cmp_stu_byxxxx的实现 4.3 结构体型数据排序后输出函数print_stu的实现 4.4 结构体型数据测试函数test_stu的实现 4.5 完整程序及运行结果 qsort采用快排实现现使用冒泡进行模拟实现 关于排序冒泡排序实现文章参考如下【C语言】_冒泡排序及其优化思路-CSDN博客https://blog.csdn.net/m0_63299495/article/details/145014576 关于qsort函数具体使用方法文章参考如下 【C语言】_qsort函数-CSDN博客https://blog.csdn.net/m0_63299495/article/details/145076745 1. 排序函数的参数 void bubble_sort(void* base, // 参数1泛型指针接收待排序数组基址size_t sz, // 参数2正数变量接收待排数据个数size_t width, // 参数3正数变量接收单个待排数据大小int(*cmp)(const void* p1,const void* p2) // 参数4函数指针变量接收待排数据大小比较函数地址、 { } 注理解函数指针的重要作用正是由于函数指针cmp的实现才实现了多种类型元素的比较 2. 排序函数函数体 2.1 比较元素的表示 1、对于冒泡排序比较原则为相邻元素进行比较。 对于原排整型数据的冒泡排序可使用对 arr[ j ]与arr[ j1 ]直接进行判断 但为实现各种类型数据的排序则需重新编写元素比较函数cmp 2、关于相邻元素的表示当前待排序数组基址为base待排序元素大小为width 对于第 j 个与第 j1 个元素可将base强转为char*类型后偏移对应倍数的数据元素大小width 即表示为(char*)base j × width 与 (char*)base (j1) × width cmp((char*)basej*width,(char*)base(j1)*width) 2.2 交换函数Swap的实现 1、对于原排整型数据的冒泡排序可创建整型临时变量tmp对arr[ j ]与arr[ j1 ]进行交换 但对于多种类型数据编写时临时变量不能确定为某一具体类型 单独封装交换函数Swap以实现交换功能 2、关于Swap函数的参数类型由于已强转为char*类型故其参数类型直接写为char*类型即可 3、对于Swap函数仅有待交换元素的起始指针并不能完成交换还需提供待交换元素大小 void Swap(char* buf1, char* buf2,size_t width) { } 4、由于元素大小未知可令待交换元素逐字节进行交换交换元素大小width次 void Swap(char* buf1, char* buf2,size_t width) {for (int i 0; i width; i) {char* tmp *buf1;*buf1 *buf2;*buf2 tmp;buf1;buf2;} } 2.3 排序函数bubble_sort的实现 void bubble_sort(void* base, // 参数1泛型指针接收待排序数组基址size_t sz, // 参数2正数变量接收待排数据个数size_t width, // 参数3正数变量接收单个待排数据大小int(*cmp)(const void* p1,const void* p2)) { // 参数4函数指针变量接收待排数据大小比较函数地址// 确定趟数: // 对于sz个数需排sz-1趟int i 0;for (int i 0; i sz - 1; i) {// 1趟排序内:// 假设该序列已经有序int flag 1;int j 0;// 确定1趟内比较次数// 对于第i趟待排序数个数sz-i个需比较的数的对数sz-1-i对for (j 0; j sz - 1 - i; j) {// 比较相邻两个数据/元素if (cmp((char*)basej*width,(char*)base(j1)*width)0) {// 交换两个元素Swap((char*)base j * width, (char*)base (j 1) * width, width);// 进入循环体发生交换序列非有序将标志重置为0flag 0;}}// 本趟未交换则表示序列已经有序终止后续趟数if (flag 1) {break;}} } 3. 测试整型数据排序 3.1 整型数据比较函数cmp_int的实现 int cmp_int(const void* p1, const void* p2) {return *(int*)p1 - *(int*)p2; } 3.2 整型数据排序后输出函数print_int的实现 void print_int(int* arr, int sz) {for (int i 0; i sz; i) {printf(%d , *(arr i));} } 3.3 整型数据测试函数test_int的实现  void test_int() {int arr[] { 9,7,5,3,1,8,6,4,2,0 };int sz sizeof(arr) / sizeof(arr[0]);bubble_sort(arr,sz,sizeof(arr[0]),cmp_int);print_int(arr, sz); } 3.4 完整程序及运行结果  #includestdio.h int cmp_int(const void* p1, const void* p2) {return *(int*)p1 - *(int*)p2; } void Swap(char* buf1, char* buf2,size_t width) {for (int i 0; i width; i) {char* tmp *buf1;*buf1 *buf2;*buf2 tmp;buf1;buf2;} } void bubble_sort(void* base, // 参数1泛型指针接收待排序数组基址size_t sz, // 参数2正数变量接收待排数据个数size_t width, // 参数3正数变量接收单个待排数据大小int(*cmp)(const void* p1,const void* p2)) { // 参数4函数指针变量接收待排数据大小比较函数地址// 确定趟数: // 对于sz个数需排sz-1趟int i 0;for (int i 0; i sz - 1; i) {// 1趟排序内:// 假设该序列已经有序int flag 1;int j 0;// 确定1趟内比较次数// 对于第i趟待排序数个数sz-i个需比较的数的对数sz-1-i对for (j 0; j sz - 1 - i; j) {// 比较相邻两个数据/元素if (cmp((char*)basej*width,(char*)base(j1)*width)0) {// 交换两个元素Swap((char*)base j * width, (char*)base (j 1) * width, width);// 进入循环体发生交换序列非有序将标志重置为0flag 0;}}// 本趟未交换则表示序列已经有序终止后续趟数if (flag 1) {break;}} } void print_int(int* arr, int sz) {for (int i 0; i sz; i) {printf(%d , *(arr i));} } void test_int() {int arr[] { 9,7,5,3,1,8,6,4,2,0 };int sz sizeof(arr) / sizeof(arr[0]);bubble_sort(arr,sz,sizeof(arr[0]),cmp_int);print_int(arr, sz); } int main() {test_int();return 0; } 运行结果如下 4. 测试结构体型数据排序 4.1 创建结构体型数据 typedef struct Stu {char name[20];int age; }Stu; 4.2 结构体型数据比较函数cmp_stu_byxxxx的实现 由于结构体有多个成员变量分别编写对应排序函数 int cmp_stu_byname(const void* p1, const void* p2) {strcmp(((Stu*)p1)-name, ((Stu*)p2)-name);//strcmp( (*((Stu*)p1)).name, (*((Stu*)p1)).name ); } int cmp_stu_byage(const void* p1, const void* p2) {return ((Stu*)p1)-age - ((Stu*)p2)-age;/*return (*((Stu*)p1)).age - (*((Stu*)p1)).age;*/ } 4.3 结构体型数据排序后输出函数print_stu的实现 void print_stu(Stu* arr, int sz) {for (int i 0; i sz; i) {printf(name:%s, age:%d\n, arr[i].name, arr[i].age);} } 4.4 结构体型数据测试函数test_stu的实现 void test_stu() {struct Stu arr[3] { {zhangsan,20},{lisi,19},{wangwu,21} };int sz sizeof(arr) / sizeof(arr[0]);printf(sorted by name:\n);bubble_sort(arr, sz, sizeof(arr[0]), cmp_stu_byname);print_stu(arr, sz);printf(\n);printf(sorted by age:\n);bubble_sort(arr, sz, sizeof(arr[0]), cmp_stu_byage);print_stu(arr, sz); } 4.5 完整程序及运行结果 #includestdio.h #includestring.h typedef struct Stu {char name[20];int age; }Stu; int cmp_stu_byname(const void* p1, const void* p2) {strcmp(((Stu*)p1)-name, ((Stu*)p2)-name);//strcmp( (*((Stu*)p1)).name, (*((Stu*)p1)).name ); } int cmp_stu_byage(const void* p1, const void* p2) {return ((Stu*)p1)-age - ((Stu*)p2)-age;/*return (*((Stu*)p1)).age - (*((Stu*)p1)).age;*/ } void print_stu(Stu* arr, int sz) {for (int i 0; i sz; i) {printf(name:%s, age:%d\n, arr[i].name, arr[i].age);} } void test_stu() {struct Stu arr[3] { {zhangsan,20},{lisi,19},{wangwu,21} };int sz sizeof(arr) / sizeof(arr[0]);printf(sorted by name:\n);bubble_sort(arr, sz, sizeof(arr[0]), cmp_stu_byname);print_stu(arr, sz);printf(\n);printf(sorted by age:\n);bubble_sort(arr, sz, sizeof(arr[0]), cmp_stu_byage);print_stu(arr, sz); } void bubble_sort(void* base, // 参数1泛型指针接收待排序数组基址size_t sz, // 参数2正数变量接收待排数据个数size_t width, // 参数3正数变量接收单个待排数据大小int(*cmp)(const void* p1,const void* p2)) { // 参数4函数指针变量接收待排数据大小比较函数地址// 确定趟数: // 对于sz个数需排sz-1趟int i 0;for (int i 0; i sz - 1; i) {// 1趟排序内:// 假设该序列已经有序int flag 1;int j 0;// 确定1趟内比较次数// 对于第i趟待排序数个数sz-i个需比较的数的对数sz-1-i对for (j 0; j sz - 1 - i; j) {// 比较相邻两个数据/元素if (cmp((char*)basej*width,(char*)base(j1)*width)0) {// 交换两个元素Swap((char*)base j * width, (char*)base (j 1) * width, width);// 进入循环体发生交换序列非有序将标志重置为0flag 0;}}// 本趟未交换则表示序列已经有序终止后续趟数if (flag 1) {break;}} } int main() {test_stu();return 0; } 运行结果如下
http://www.hkea.cn/news/14420675/

相关文章:

  • 国内免费设计素材网站青海手机网站建设
  • 网站设计参考文献中小企业官网
  • 网站制作怎么办电子商务网站建设考卷
  • cms织梦织梦修改网站源码wordpress建站网页无法运
  • 网站copyright写法常州新北区建设局网站
  • 做商城网站还要服务器嘉兴做网站建设的公司哪家好
  • 婚恋网站制作wordpress addrewriterule
  • 手机访问跳转手机网站wordpress网页手机自适应
  • 建门户网站要多少钱建设部造价工程师考试网站
  • 郑州做网站狼牙电商网站会员体制怎么做
  • 南乐网站建设价格石家庄住房和城乡建设厅网站
  • 网站建设对客户的影响软件开发如何定价
  • 网站建设软件有哪些自适应网站做百度推广
  • 自适应网站功能免费微信点餐小程序
  • 北京网站开发团队知名seo电话
  • 国外优秀摄影作品网站天猫网页版
  • 摄影婚纱官网2017织梦网站怎么做seo
  • 建网站备案好麻烦做宣传图片用什么网站
  • 东莞网站建设公司注册网易企业邮箱手机登录
  • 如何修改上线网站wordpress去掉购物车
  • 做竞价网站服务器多少钱线上平面设计课程
  • 唐山网站建设模板公司网站建设团队
  • 手机网站制作套餐wordpress函数调用函数
  • 英文网站域名注册郑州安卓app开发
  • 大学生作业做网站绍兴网站制作
  • wordpress建站 云打印肇庆网站推广排名
  • 做网站一定要有空间吗网站建设kpi考核
  • 企业建设网站应该一般多少钱东营在建项目
  • 制作网站river小程序代理商有哪些
  • 教学信息化大赛网站建设作品WordPress添加工单功能