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

做网站的图片要多少像素摄影网站建设流程

做网站的图片要多少像素,摄影网站建设流程,淘宝开店培训,长安网站建设软件开发嵌入式Day12 一、qsort函数基础概述 &#xff08;一&#xff09;函数功能 作用&#xff1a;对任意类型数组进行排序&#xff0c;支持自定义比较规则&#xff0c;底层基于快速排序算法&#xff08;不稳定排序&#xff09;。头文件&#xff1a;需包含 <stdlib.h>。 &am…

嵌入式Day12

一、qsort函数基础概述

(一)函数功能

  • 作用:对任意类型数组进行排序,支持自定义比较规则,底层基于快速排序算法(不稳定排序)。
  • 头文件:需包含 <stdlib.h>

(二)函数原型

void qsort(void *base, size_t num, size_t size, int (*compare)(const void *, const void *));

(三)参数解析

参数类型说明
basevoid*待排序数组的首地址(通用指针,可指向任意类型数组)。
numsize_t数组中待排序元素的个数。
sizesize_t单个元素的字节大小(如sizeof(int)sizeof(结构体))。
compare函数指针自定义比较函数,用于确定元素大小关系。

二、自定义比较函数compare

(一)函数要求

  1. 返回值类型int
  2. 参数类型:两个const void*指针,分别指向待比较的两个元素。
  3. 逻辑规则
    • 返回负数:表示第一个元素应排在第二个元素前面(即a < b)。
    • 返回正数:表示第一个元素应排在第二个元素后面(即a > b)。
    • 返回0:表示两个元素相等,排序中相对位置不保证(快排不稳定)。

(二)核心操作步骤

  1. 指针类型转换:将void*指针强制转换为目标元素类型的指针(如int*char*结构体指针)。
  2. 元素值比较:根据业务逻辑比较两个元素的值,返回相应符号的整数。

三、qsort函数使用场景与示例

(一)排序int数组

示例:降序排序
#include <stdio.h>
#include <stdlib.h>int compare_desc(const void *a, const void *b) {int num1 = *(int*)a;int num2 = *(int*)b;return num2 - num1; // 降序(num2 > num1时返回正数,num1排在后面)
}int main() {int arr[] = {5, 2, 8, 1, 3};int len = sizeof(arr) / sizeof(arr[0]);qsort(arr, len, sizeof(int), compare_desc); // 调用qsort// 输出结果:8 5 3 2 1for (int i = 0; i < len; i++) {printf("%d ", arr[i]);}return 0;
}

(二)排序字符串数组(字典序)

示例:升序字典序排序
#include <string.h>int compare_str(const void *a, const void *b) {// a和b是指向char*的指针,需先解引用得到字符串指针char *str1 = *(char**)a;char *str2 = *(char**)b;return strcmp(str1, str2); // 升序字典序(strcmp返回负数/0/正数)
}int main() {char *strs[] = {"apple", "banana", "cat", "dog"};int len = sizeof(strs) / sizeof(strs[0]);qsort(strs, len, sizeof(char*), compare_str);// 输出结果:apple banana cat dogfor (int i = 0; i < len; i++) {printf("%s ", strs[i]);}return 0;
}

(三)排序结构体数组

结构体定义
typedef struct {int stu_id;       // 学号int total_score;  // 总分int age;          // 年龄char name[20];    // 姓名
} Student;
示例1:按总分升序排序
int compare_score(const void *a, const void *b) {Student *s1 = (Student*)a;Student *s2 = (Student*)b;return s1->total_score - s2->total_score; // 升序(总分小的在前)
}
示例2:按学号降序排序
int compare_id(const void *a, const void *b) {Student *s1 = (Student*)a;Student *s2 = (Student*)b;return s2->stu_id - s1->stu_id; // 降序(学号大的在前)
}
示例3:复合条件排序(总分降序→年龄升序→姓名字典序升序)
int compare_combined(const void *a, const void *b) {Student *s1 = (Student*)a;Student *s2 = (Student*)b;// 1. 总分降序if (s1->total_score != s2->total_score) {return s2->total_score - s1->total_score;}// 2. 年龄升序if (s1->age != s2->age) {return s1->age - s2->age;}// 3. 姓名升序字典序return strcmp(s1->name, s2->name);
}

四、注意事项与常见错误

(一)指针类型转换错误

  • 错误示例:排序字符串数组时直接强转void*char*(应为char**)。

    // 错误:a实际是char**类型,需先解引用
    char *str1 = (char*)a; // 错误,a是void*,指向char*元素(即二级指针)
    // 正确:先转为char**,再解引用得到char*
    char *str1 = *(char**)a; 
    

(二)比较函数返回逻辑错误

  • 常见问题:返回值符号与排序顺序不匹配(如希望降序却返回a - b)。
  • 解决方案:明确比较逻辑,可通过数学表达式目标顺序下的差值(如降序用b - a)。

(三)数组元素大小错误

  • 错误示例:传递size参数时使用sizeof(数组名)而非sizeof(元素类型)

    qsort(arr, len, sizeof(arr), compare); // 错误,sizeof(arr)是整个数组大小
    qsort(arr, len, sizeof(int), compare); // 正确,单个元素大小为sizeof(int)
    

(四)处理相等元素的稳定性

  • qsort特性:快速排序不稳定,相同元素排序后相对位置可能改变。
  • 适用场景:若需稳定排序,需自定义算法(如归并排序)或确保相等元素无需保留顺序。

五、扩展:qsort与冒泡排序对比

特性qsort冒泡排序
时间复杂度平均O(n log n)(快排)O(n²)
空间复杂度O(log n)(递归栈)O(1)
稳定性不稳定稳定(可修改实现)
适用场景大规模数据排序小规模数据或教学场景
灵活性支持自定义比较函数需手动实现比较逻辑

六、总结:qsort函数使用流程

  1. 定义比较函数:根据需求编写compare函数,确保指针转换和返回逻辑正确。
  2. 调用qsort:传入数组首地址、元素个数、单个元素大小及比较函数。
  3. 验证结果:通过遍历数组或打印检查排序是否符合预期。

核心口诀

  • 指针转换要正确,类型匹配是关键。
  • 比较函数返回值,符号决定前后序。
  • 元素大小需精准,避免越界和错误。

文章转载自:

http://H62hthCp.fydsr.cn
http://f1d9h4sY.fydsr.cn
http://P7CJ0BIm.fydsr.cn
http://Wu8E1JpN.fydsr.cn
http://f81ah0Ad.fydsr.cn
http://Uk5my9vF.fydsr.cn
http://KMo9nKMg.fydsr.cn
http://DEdmzqtg.fydsr.cn
http://ZK374azK.fydsr.cn
http://vPTY1yMe.fydsr.cn
http://e8lwsFvm.fydsr.cn
http://ob6qTmfl.fydsr.cn
http://yuzoIV8q.fydsr.cn
http://OTMki4x2.fydsr.cn
http://JWlElPVS.fydsr.cn
http://udhUwiT3.fydsr.cn
http://s3aNKlb9.fydsr.cn
http://8miHbodk.fydsr.cn
http://Kt3jfyBI.fydsr.cn
http://hnK5H7BE.fydsr.cn
http://IUH8S0BJ.fydsr.cn
http://gVFaCzpN.fydsr.cn
http://nkuH3Mdr.fydsr.cn
http://rJ5JrfsS.fydsr.cn
http://v1QrzBIU.fydsr.cn
http://BS9dofhH.fydsr.cn
http://dU6A1FAp.fydsr.cn
http://jrcZWDWP.fydsr.cn
http://YfjKBUr6.fydsr.cn
http://nwZNgk5Z.fydsr.cn
http://www.dtcms.com/wzjs/663023.html

相关文章:

  • 网站运营与管理实验报告关于招聘的网站开发图
  • 网站专题页面用什么做一家装修的网站怎么做
  • 网站每天更新的内容是内链吗培训网站建设情况
  • 哪里有网站建设定制合肥网络推广专员
  • 国外网站工作室企业做网站费用
  • 首饰盒东莞网站建设城乡建设吧部网站
  • html5响应式网站模版wordpress的windows
  • 织梦移动端网站怎么做网站开发有专利吗
  • 网站备案 法人企业资质查询系统官网
  • 中山环保骏域网站建设专家如何将网站做成app
  • 培训网站开发罗城建设局网站
  • 学校网站风格wordpress 移动端 主题
  • 网站推广报告网站美工切图是如何做的
  • 网站设计 验收标准wordpress加个文本框
  • 商丘网站建设哪家好做英语阅读的网站或是app
  • 北京的网站建设一键建站
  • 泰安网站建设与优化网页制作与网站建设完全学习手册pdf
  • 查看服务器上的网站企业做网站价钱
  • 建筑建材网站建设微信网页版官网登录
  • 工作室项目网站wordpress链接指向本地
  • 网站建设公司整站源码网站建设管理
  • 青海休闲网站建设公司深圳设计公司最新招聘
  • 网站建设高端网页设计网站建设可行性分析报告范文
  • 注册外贸网站有哪些问题iis 网站 红
  • 做公司的网站的需求有哪些wordpress怎样给目录增加
  • php电子商务网站开发做证券考试的网站
  • 360如何做网站建设银行网站不能登录密码错误
  • wp网站怎么用插件做html网页滕州seo
  • 用别人的资源做网站企业查查网官网
  • 大连网站开发需要多少钱烟台环保网站建设