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

[C语言日寄] qsort函数的练习

在这里插入图片描述

【作者主页】siy2333
【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是进阶开发者,这里都能满足你的需求!
【食用方法】1.根据题目自行尝试 2.查看基础思路完善题解 3.学习拓展算法
【Gitee链接】资源保存在我的Gitee仓库:https://gitee.com/siy2333/study


文章目录

  • 前言
  • 题目引入
  • 一、qsort函数的定义与使用
    • qsort函数的定义
    • qsort函数的使用
      • 1. 示例:对整数数组排序
      • 2. 示例:对结构体数组排序
  • 二、知识点分析
    • 1. qsort函数的参数
      • base参数
      • nitems参数
      • size参数
      • compar参数
    • 2. 比较函数的编写
      • 对整数数组排序
      • 对浮点数数组排序
      • 对字符串数组排序
      • 对结构体数组排序
    • 3. qsort函数的工作原理
  • 三、注意事项
    • 1. 比较函数的返回值
    • 2. 比较函数的参数类型
    • 3. 数组的大小
    • 4. 数组的元素个数
  • 四、拓展应用
    • 1. 对结构体数组进行多级排序
    • 2. 对结构体数组进行逆序排序
    • 3. 对结构体数组进行部分排序
    • 4. 对结构体数组进行自定义排序
  • 五、总结


前言

在C语言的世界里,qsort 函数是一个非常强大且灵活的工具,它允许我们对任意类型的数组进行快速排序。这种特性使得 qsort 在处理复杂数据排序时变得非常方便。今天,我们就通过一个简单的程序来深入探讨 qsort 的使用,以及它在C语言中的重要性。


题目引入

下面程序的输出结果是:( )

#include <stdio.h>
#include <stdlib.h>struct stu
{int num;char name[10];int age;
};int cmp(const void* a, const void* b)
{struct stu* pa = (struct stu*)a;struct stu* pb = (struct stu*)b;if (pa->age != pb->age) {return pa->age - pb->age;} else {return strcmp(pa->name, pb->name);}
}void print_students(struct stu* students, int size)
{for (int i = 0; i < size; i++) {printf("Student %d: Num = %d, Name = %s, Age = %d\n", i + 1, students[i].num, students[i].name, students[i].age);}
}int main()
{struct stu students[3] = {{9801, "zhang", 20},{9802, "wang", 19},{9803, "zhao", 18}};printf("Before sorting:\n");print_students(students, 3);qsort(students, 3, sizeof(struct stu), cmp);printf("After sorting:\n");print_students(students, 3);return 0;
}

A. 按编号排序

B. 按姓名排序

C. 按年龄排序,年龄相同按姓名排序

D. 按年龄排序,年龄相同按编号排序

在接下来的文章中,我们会一起把 qsort 的知识与题目结合起来,学习这一知识点。

一、qsort函数的定义与使用

qsort函数的定义

qsort 函数是C语言标准库 <stdlib.h> 中提供的一个通用排序函数,其原型如下:

void qsort(void* base, size_t nitems, size_t size, int (*compar)(const void*, const void*));
  • base:指向要排序的数组的首地址。
  • nitems:数组中元素的个数。
  • size:数组中每个元素的大小(以字节为单位)。
  • compar:比较函数的指针,用于定义排序的规则。

qsort函数的使用

1. 示例:对整数数组排序

#include <stdio.h>
#include <stdlib.h>int cmp(const void* a, const void* b)
{return (*(int*)a - *(int*)b);
}int main()
{int arr[] = {5, 2, 9, 1, 5, 6};int n = sizeof(arr) / sizeof(arr[0]);printf("Before sorting:\n");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");qsort(arr, n, sizeof(int), cmp);printf("After sorting:\n");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}

输出结果:

Before sorting:
5 2 9 1 5 6
After sorting:
1 2 5 5 6 9

2. 示例:对结构体数组排序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct stu
{int num;char name[10];int age;
};int cmp(const void* a, const void* b)
{struct stu* pa = (struct stu*)a;struct stu* pb = (struct stu*)b;if (pa->age != pb->age) {return pa->age - pb->age;} else {return strcmp(pa->name, pb->name);}
}void print_students(struct stu* students, int size)
{for (int i = 0; i < size; i++) {printf("Student %d: Num = %d, Name = %s, Age = %d\n", i + 1, students[i].num, students[i].name, students[i].age);}
}int main()
{struct stu students[3] = {{9801, "zhang", 20},{9802, "wang", 19},{9803, "zhao", 18}};printf("Before sorting:\n");print_students(students, 3);qsort(students, 3, sizeof(struct stu), cmp);printf("After sorting:\n");print_students(students, 3);return 0;
}

输出结果:

Before sorting:
Student 1: Num = 9801, Name = zhang, Age = 20
Student 2: Num = 9802, Name = wang, Age = 19
Student 3: Num = 9803, Name = zhao, Age = 18
After sorting:
Student 1: Num = 9803, Name = zhao, Age = 18
Student 2: Num = 9802, Name = wang, Age = 19
Student 3: Num = 9801, Name = zhang, Age = 20

二、知识点分析

1. qsort函数的参数

base参数

base 参数是指向要排序的数组的首地址。在C语言中,数组名本身就是一个指向数组首元素的指针,因此可以直接将数组名传递给 base 参数。

nitems参数

nitems 参数表示数组中元素的个数。可以通过 sizeof(arr) / sizeof(arr[0]) 来计算数组中元素的个数。

size参数

size 参数表示数组中每个元素的大小(以字节为单位)。对于基本数据类型(如 intfloat 等),可以直接使用 sizeof 运算符来获取其大小。对于结构体类型,也可以使用 sizeof 运算符来获取其大小。

compar参数

compar 参数是一个比较函数的指针,用于定义排序的规则。比较函数的原型如下:

int cmp(const void* a, const void* b);
  • 如果第一个参数小于第二个参数,返回负数。
  • 如果第一个参数等于第二个参数,返回零。
  • 如果第一个参数大于第二个参数,返回正数。

2. 比较函数的编写

比较函数是 qsort 函数的核心部分,它决定了排序的规则。比较函数的编写需要根据具体的需求来实现。以下是一些常见的比较函数的编写方法:

对整数数组排序

int cmp(const void* a, const void* b)
{return (*(int*)a - *(int*)b);
}

对浮点数数组排序

int cmp(const void* a, const void* b)
{if (*(float*)a < *(float*)b) {return -1;} else if (*(float*)a > *(float*)b) {return 1;} else {return 0;}
}

对字符串数组排序

int cmp(const void* a, const void* b)
{return strcmp(*(char**)a, *(char**)b);
}

对结构体数组排序

int cmp(const void* a, const void* b)
{struct stu* pa = (struct stu*)a;struct stu* pb = (struct stu*)b;if (pa->age != pb->age) {return pa->age - pb->age;} else {return strcmp(pa->name, pb->name);}
}

3. qsort函数的工作原理

qsort 函数是一种快速排序算法的实现。快速排序的基本思想是:选择一个基准值(pivot),将数组分为两部分,左边的部分都小于基准值,右边的部分都大于基准值,然后递归地对左右两部分进行排序。

qsort 函数的工作原理如下:

  1. 选择一个基准值(pivot)。
  2. 将数组分为两部分,左边的部分都小于基准值,右边的部分都大于基准值。
  3. 递归地对左右两部分进行排序。

三、注意事项

1. 比较函数的返回值

比较函数的返回值必须符合以下规则:

  • 如果第一个参数小于第二个参数,返回负数。
  • 如果第一个参数等于第二个参数,返回零。
  • 如果第一个参数大于第二个参数,返回正数。

如果返回值不符合上述规则,可能会导致排序结果不正确。

2. 比较函数的参数类型

比较函数的参数类型是 const void*,表示指向任意类型的指针。在比较函数中,需要将 const void* 类型的参数强制转换为具体的类型指针,然后进行比较。

3. 数组的大小

在调用 qsort 函数时,需要正确计算数组的大小。对于基本数据类型(如 intfloat 等),可以直接使用 sizeof 运算符来获取其大小。对于结构体类型,也可以使用 sizeof 运算符来获取其大小。

4. 数组的元素个数

在调用 qsort 函数时,需要正确计算数组的元素个数。可以通过 sizeof(arr) / sizeof(arr[0]) 来计算数组中元素的个数。

四、拓展应用

1. 对结构体数组进行多级排序

在实际应用中,我们可能需要对结构体数组进行多级排序。例如,先按年龄排序,如果年龄相同,则按姓名排序。以下是一个示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct stu
{int num;char name[10];int age;
};int cmp(const void* a, const void* b)
{struct stu* pa = (struct stu*)a;struct stu* pb = (struct stu*)b;if (pa->age != pb->age) {return pa->age - pb->age;} else {return strcmp(pa->name, pb->name);}
}void print_students(struct stu* students, int size)
{for (int i = 0; i < size; i++) {printf("Student %d: Num = %d, Name = %s, Age = %d\n", i + 1, students[i].num, students[i].name, students[i].age);}
}int main()
{struct stu students[3] = {{9801, "zhang", 20},{9802, "wang", 19},{9803, "zhao", 18}};printf("Before sorting:\n");print_students(students, 3);qsort(students, 3, sizeof(struct stu), cmp);printf("After sorting:\n");print_students(students, 3);return 0;
}

2. 对结构体数组进行逆序排序

在实际应用中,我们可能需要对结构体数组进行逆序排序。以下是一个示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct stu
{int num;char name[10];int age;
};int cmp(const void* a, const void* b)
{struct stu* pa = (struct stu*)a;struct stu* pb = (struct stu*)b;if (pa->age != pb->age) {return pb->age - pa->age;} else {return strcmp(pb->name, pa->name);}
}void print_students(struct stu* students, int size)
{for (int i = 0; i < size; i++) {printf("Student %d: Num = %d, Name = %s, Age = %d\n", i + 1, students[i].num, students[i].name, students[i].age);}
}int main()
{struct stu students[3] = {{9801, "zhang", 20},{9802, "wang", 19},{9803, "zhao", 18}};printf("Before sorting:\n");print_students(students, 3);qsort(students, 3, sizeof(struct stu), cmp);printf("After sorting:\n");print_students(students, 3);return 0;
}

3. 对结构体数组进行部分排序

在实际应用中,我们可能需要对结构体数组进行部分排序。以下是一个示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct stu
{int num;char name[10];int age;
};int cmp(const void* a, const void* b)
{struct stu* pa = (struct stu*)a;struct stu* pb = (struct stu*)b;if (pa->age != pb->age) {return pa->age - pb->age;} else {return strcmp(pa->name, pb->name);}
}void print_students(struct stu* students, int size)
{for (int i = 0; i < size; i++) {printf("Student %d: Num = %d, Name = %s, Age = %d\n", i + 1, students[i].num, students[i].name, students[i].age);}
}int main()
{struct stu students[5] = {{9801, "zhang", 20},{9802, "wang", 19},{9803, "zhao", 18},{9804, "li", 21},{9805, "sun", 22}};printf("Before sorting:\n");print_students(students, 5);qsort(students + 1, 3, sizeof(struct stu), cmp);printf("After sorting:\n");print_students(students, 5);return 0;
}

4. 对结构体数组进行自定义排序

在实际应用中,我们可能需要对结构体数组进行自定义排序。以下是一个示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct stu
{int num;char name[10];int age;
};int cmp(const void* a, const void* b)
{struct stu* pa = (struct stu*)a;struct stu* pb = (struct stu*)b;if (pa->age != pb->age) {return pa->age - pb->age;} else {return strcmp(pa->name, pb->name);}
}void print_students(struct stu* students, int size)
{for (int i = 0; i < size; i++) {printf("Student %d: Num = %d, Name = %s, Age = %d\n", i + 1, students[i].num, students[i].name, students[i].age);}
}int main()
{struct stu students[3] = {{9801, "zhang", 20},{9802, "wang", 19},{9803, "zhao", 18}};printf("Before sorting:\n");print_students(students, 3);qsort(students, 3, sizeof(struct stu), cmp);printf("After sorting:\n");print_students(students, 3);return 0;
}

五、总结

qsort 函数是C语言中一个非常重要的概念,它允许我们将多个不同类型的数据组合在一起,形成一个逻辑上的整体。

关注窝,每三天至少更新一篇优质c语言题目详解~

[专栏链接QwQ] :⌈c语言日寄⌋CSDN
[关注博主ava]:siy2333
感谢观看~ 我们下次再见!!

相关文章:

[C语言日寄] qsort函数的练习

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…...

单引号与双引号在不同编程语言中的使用与支持

在编程语言中&#xff0c;单引号和双引号是常见的符号&#xff0c;它们通常用来表示字符和字符串。然而&#xff0c;如何使用这两种符号在不同的编程语言中有所不同&#xff0c;甚至有一些语言并不区分单引号和双引号的用途。本文将详细介绍不同编程语言中单引号与双引号的支持…...

Next.js项目实战——MindAI

我的整个毕业论文&#xff0c;是基于Next.js搭建完成的。项目的搭建过程分为多个章节&#xff0c;循序渐进&#xff1a; 1.环境准备与项目初始化 Node.js和npm的安装配置创建Next.js 14项目TypeScript配置项目目录结构说明Git初始化和.gitignore配置 2.基础架构搭建 Tailwi…...

MindGYM:一个用于增强视觉-语言模型推理能力的合成数据集框架,通过生成自挑战问题来提升模型的多跳推理能力。

2025-03-13&#xff0c;由中山大学和阿里巴巴集团的研究团队提出了MindGYM框架&#xff0c;通过合成自挑战问题来增强视觉-语言模型&#xff08;VLMs&#xff09;的推理能力。MindGYM框架通过生成多跳推理问题和结构化课程训练&#xff0c;显著提升了模型在推理深度和广度上的表…...

WPS的Excel文档如何利用VB脚本批量替换超链接的内容

准备知识 关于WPS的Excel点击单元格打开别的文档的两种方法的探究【为单元格添加超链接】 https://blog.csdn.net/wenhao_ir/article/details/146212767 激活WPS的Excel文档中的VB编辑器功能 没有激活前的截图如下: 原因是我们的电脑中缺乏VBA插件,我们点击“开发工具”:…...

phpstudy+phpstorm+xdebug【学习笔记】

配置PHPStudy 配置PHPSTORM phpstorm选择PHP版本 配置DEBUG 设置服务器 编辑配置 学习参考链接&#xff1a;&#xff1a;https://blog.csdn.net/m0_60571842/article/details/133246064...

(包清楚解疑)ES6中__dirname和__filename不见了吗?,到底怎么用

我们知道&#xff0c;在commonJs中&#xff0c;__dirname和__filename分别表示当前js文件所在目录路径和所在路径的绝对路径。可以直接使用&#xff0c;但是在ES6和Node v20.11.0之后&#xff0c;不能直接用了。 首先明确一下这两个变量为什么会用到&#xff1a; 当我们在使用…...

3.4 基于TSX的渲染函数类型安全实践

文章目录 1. TSX与类型安全的核心价值1.1 TSX的独特优势1.2 类型安全的核心收益2. 基础类型安全实践2.1 组件Props类型约束2.2 子元素类型校验2.3 事件类型系统3. 高级类型安全模式3.1 泛型组件设计3.2 高阶组件类型3.3 类型守卫应用4. 类型操作工具集4.1 实用类型工具4.2 类型…...

vue-draggable-plus实现某些子元素不被拖拽

在使用vue-draggable-plus时倘若只是节点里面所有元素都可以拖拽倒还好实现&#xff0c;但遇到某些子元素是作为其他作用不可拖拽或者可拖拽不可替换这些情况&#xff0c;则比较头疼了 解决&#xff1a; 1. 绑定移动事件 2. 处理移动世界并对对应情况返回false //移动事件 co…...

基于SpringBoot的Mybatis和纯MyBatis项目搭建的区别

【由于之前学习MyBatis的时候是跟着视频敲的纯MyBatis项目&#xff0c;以至于在突然看到别人在SpringBoot项目里搭建MyBatis方式的时候很懵比…特此文字形式记录一下区别&#xff08;应该还有好多种其他方式是我不知道的&#xff0c;主要应该就是要知道关键的流程步骤&#xff…...

二进制数(十进制转二进制)

二进制数 #include<stdio.h> int main(){int n;while(scanf("%d",&n)!EOF){int a[10000];int i0;if(n0){printf("0\n");continue;}while(n){a[i]n%2;i;nn/2;}for(int ji-1;j>0;j--){printf("%d",a[j]);}printf("\n");}…...

一周学会Flask3 Python Web开发-SQLAlchemy添加数据操作-班级模块

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili SQLAlchemy提供session.add()方法添加model实体数据&#xff0c;以及提供session.commit()提交事务。 首先list.html加一个添…...

【python】OpenCV—Hough Circle Transform

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数6、参考 更多有趣的代码示例&#xff0c;可参考【Programming】 1、功能描述 2、代码实现 载入必要的库 import sys import cv2 as cv import numpy as np函数入口 if __name__ "__main__&qu…...

1216走迷宫

1216走迷宫 ⭐️难度&#xff1a;简单 &#x1f31f;考点&#xff1a;bfs &#x1f4d6; &#x1f4da; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {public static void main(String[] …...

Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测

SCI一区级 | Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测 目录 SCI一区级 | Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME-CNN-LSTM-Multihead-Attention霜冰算法…...

医疗资源联动,广州长泰医院与海南德雅医院共筑地贫防治新篇章

​ 为贯彻落实"健康中国"战略关于出生缺陷综合防治的部署要求&#xff0c;推动地中海贫血防治体系建设。2025年3月15日&#xff0c;广州长泰医院与海南德雅医院联合主办的“地中海贫血生殖遗传干预大型义诊暨合作签约仪式”在广州正式启动&#xff0c;活动以“爱与希…...

栈区、堆区、静态区

一、栈区&#xff08;Stack&#xff09; 1.栈区是什么 •栈区&#xff08;Stack&#xff09;是计算机内存中的一部分&#xff0c;用于存储程序运行时的临时数据。 2.栈区的有关性质 &#xff08;1&#xff09;存储临时数据 • 栈区主要用于存储局部变量&#xff08;比如函…...

SpringBoot整合Swagger (Springfox 3.0.0)

Maven依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version> </dependency> 配置文件设置 # 解决"Unable to infer base url"错误的关键配…...

ShenNiusModularity项目源码学习(16:ShenNius.Admin.Mvc项目分析-1)

ShenNius.Admin.Mvc项目是MVC模式的启动项目&#xff0c;包括了MVC模式下所需的所有的页面、控制器类、资源、js文件等数据&#xff0c;该项目仅依赖ShenNius.Admin.API项目&#xff0c;主要使用后者的ShenniusAdminApiModule模块类及一些依赖项目中定义的辅助类等。本文学习Sh…...

Flutter PopScope对于iOS设置canPop为false无效问题

这个问题应该出现很久了&#xff0c;之前的组件WillPopScope用的好好的&#xff0c;flutter做优化打算“软性”处理禁用返回手势&#xff0c;出了PopScope&#xff0c;这个组件也能处理在安卓设备上的左滑返回事件。但是iOS上面左滑返回手势禁用&#xff0c;一直无效。 当然之…...

第十次CCF-CSP认证(含C++源码)

第十次CCF-CSP认证 分蛋糕满分题解 学生排队满分题解 Markdown语法题目解读满分代码 结语 分蛋糕 题目链接 满分题解 基本思路&#xff1a;我们需要保证除了最后一个小朋友之外的所有人&#xff0c;分得的蛋糕都大于等于给定的K值&#xff0c;为什么是大于等于&#xff0c;是…...

leetcode51.N 皇后 回溯算法求解 + 效率优化

&#x1f3af; 这篇文章探讨了解决经典N皇后问题的方法&#xff0c;采用回溯算法在标准棋盘上放置皇后&#xff0c;确保它们之间不能相互攻击。文中首先介绍了基本的思路和实现方式&#xff0c;通过递归尝试每个可能的位置并回退错误选择。为了提升效率&#xff0c;进一步提出了…...

使用 PerformanceObserver 实现网页性能优化的最佳实践

前言 在当今的网页开发中&#xff0c;性能监控已经成为确保用户体验的一个关键部分。用户对网站的速度和响应性越来越敏感&#xff0c;性能问题可能直接影响用户的满意度和留存率。因此&#xff0c;了解并使用合适的工具来监控和优化网页性能显得尤为重要。 今天&#xff0c;我…...

单口路由器多拨号ADSL实现方法

条件是多拨号场景&#xff0c;公司路由器接口不够用...

HW基本的sql流量分析和wireshark 的基本使用

前言 HW初级的主要任务就是看监控&#xff08;流量&#xff09; 这个时候就需要我们 了解各种漏洞流量数据包的信息 还有就是我们守护的是内网环境 所以很多的攻击都是 sql注入 和 webshell上传 &#xff08;我们不管对面是怎么拿到网站的最高权限的 我们是需要指出它是…...

Vue 过滤器深度解析与应用实践

文章目录 1. 过滤器概述1.1 核心概念1.2 过滤器生命周期 2. 过滤器基础2.1 过滤器定义2.2 过滤器使用 3. 过滤器高级用法3.1 链式调用3.2 参数传递3.3 动态过滤器 4. 过滤器应用场景4.1 文本格式化4.2 数字处理4.3 数据过滤 5. 性能优化与调试5.1 性能优化策略5.2 调试技巧 6. …...

基于 Docker 搭建 FRP 内网穿透开源项目

有些配置项不知道该不该用,不知道该在哪用,不知道怎么用,所以我自己写个文章简单记录一下做个笔记 本文介绍的是基于 Docker 运行 frps 和 frpc,并通过 TCP 协议简单穿透 SSH 和 HTTP,在观看本文之前请确保你的机器已经安装 Docker 服务端搭建 frps# 连接拥有公网 IP 的…...

【Git学习笔记】Git结构原理及其分支管理模型分析

【Git学习笔记】Git结构原理及其分支管理模型分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Git学习笔记 文章目录 【Git学习笔记】Git结构原理及其分支管理模型分析前言一.认识工作区、暂存区、版本库1.1 版本回退1.2 撤销修改1.3 删…...

找工作、创业的思考和出路

最近有几位朋友在找工作&#xff0c;以及探索职场出路&#xff0c;与他们聊了一些关于找工作和职业发展的话题。而这些话题对大多数职场人来说&#xff0c;都是必须考虑和面对的问题。今天就基于这两个话题展开聊聊。 首先&#xff0c;初入职场时&#xff0c;工作是相对容易找…...

2024山东大学计算机复试上机真题

2024山东大学计算机复试上机真题 2024山东大学计算机复试机试真题 历年山东大学计算机复试上机真题 历年山东大学计算机复试机试真题 在线评测&#xff1a;传动门&#xff1a;pgcode.cn 最长递减子序列 题目描述 输入数字 n&#xff0c;和 n 个整数&#xff0c;输出该数字…...

FLASK和GPU依赖安装

1. 安装所有依赖包 在终端运行以下命令&#xff08;如果使用 GPU&#xff0c;请确保已安装 CUDA 驱动&#xff09;&#xff1a; # 安装 Flask 和其他依赖 pip install flask sentence-transformers torch# 如果是 GPU 环境&#xff0c;推荐安装 CUDA 版本的 PyTorch&#xff…...

【图论】并查集的学习和使用

目录 并查集是什么&#xff1f; 举个例子 组成 父亲数组&#xff1a; find函数&#xff1a; union函数&#xff1a; 代码实现&#xff1a; fa[] 初始化code: find code&#xff1a; 递归实现: 非递归实现: union code : 画图模拟&#xff1a; 路径压缩&#xff1a…...

3.9/Q2,Charls最新文章解读!

文章题目&#xff1a;Association between remnant cholesterol and depression in middle-aged and older Chinese adults: a population-based cohort study DOI&#xff1a;10.3389/fendo.2025.1456370 中文标题&#xff1a;中国中老年人残留胆固醇与抑郁症的关系&#xff1…...

用Python和Pygame实现打砖块游戏

标题&#xff1a;用Python和Pygame实现打砖块游戏 摘要&#xff1a; 本文将介绍如何使用Python和Pygame库实现一个经典的打砖块游戏。通过这个项目&#xff0c;你将学习到Pygame的基本用法、游戏循环、碰撞检测等知识。 1. 打砖块游戏简介(完整代码在末尾) 打砖块是一款经典的…...

自动化测试-网页聊天室

项目介绍&#xff1a; 针对基于WebSocket协议的网页端即时通讯系统&#xff0c;主导设计并实施全流程自动化测试方案。通过构建模块化测试框架&#xff0c;完成对核心业务场景&#xff08;用户登录鉴权、消息同步、实时聊天等&#xff09;的自动化验证&#xff0c;最终达成测试…...

Linux第三次练习

1、创建根目录结构中的所有的普通文件 首先在根目录下面新创建一个test目录&#xff0c;然后将查找到的普通文件新建到test目录下 2、列出所有账号的账号名 3、将/etc/passwd中内容按照冒号隔开的第三个字符从大到小排序后输出所有内容 4、列出/etc/passwd中的第20行-25行内容…...

Redis学习

最开始使用的是MySQL&#xff0c;其使用的是磁盘IO方式较慢&#xff0c;无法满足一分钟成千上万次的访问&#xff0c;而使用内存IO的Redis就可以较好的满足。 Redis是NOSQL(Not Only SQL)中的键值存储数据库&#xff0c;性能好较灵活&#xff0c;是在内存中进行存储。 可以通…...

【CSS3】化神篇

目录 平面转换平移旋转改变旋转原点多重转换缩放倾斜 渐变线性渐变径向渐变 空间转换平移视距旋转立体呈现缩放 动画使现步骤animation 复合属性animation 属性拆分逐帧动画多组动画 平面转换 作用&#xff1a;为元素添加动态效果&#xff0c;一般与过渡配合使用 概念&#x…...

【C/C++算法】从浅到深学习--- 前缀和算法(图文兼备 + 源码详解)

绪论&#xff1a;冲击蓝桥杯一起加油&#xff01;&#xff01; 每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章将使用八道题由浅到深的带你了解并基本掌握前缀和思想&#xff0c;以及前缀和的基…...

VIC模型率定验证

在气候变化问题日益严重的今天&#xff0c;水文模型在防洪规划&#xff0c;未来预测等方面发挥着不可替代的重要作用。目前&#xff0c;无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然&#xff0c;这些软件有各自的优点&#xff1b;但是&am…...

二叉树的性质和实现

二叉树开端 我们要理解二叉树我们可以先看看什么是树&#xff0c;如图 这个树虽然没有什么叶子&#xff0c;不是很好看&#xff0c;但是用在这里刚刚好&#xff0c;我们从局部来看它&#xff0c;随便挑一根树枝&#xff0c; 大概是这样&#xff0c;由一根粗的的主干和一些细的…...

【Azure 架构师学习笔记】- Azure Databricks (21) --费用相关

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (20) --Delta Live Table 建议 前言 Databricks是很强大的工具和集成平台&#xff0c;但是随着越来越多地使用它&#xff0c;就没办法必须去面…...

StarRocks + Paimon 在阿里集团 Lakehouse 的探索与实践

作者&#xff1a; 范振: 阿里云计算平台开源 OLAP 负责人&#xff0c;StarRocks 社区 Champion 翁才智: 阿里云技术专家&#xff0c;Apache Paimon PMC Member 导读&#xff1a;阿里集团在推进湖仓一体化建设过程中&#xff0c;依托 StarRocks 强大的 OLAP 查询能力与 Paimon…...

OTP单片机调试工具之—单线数据编码

OTP单片机调试工具在实现过程中离不开单线数据的传输&#xff0c;那么使用哪一种方式的数据编码会比较好呢&#xff1f; 我所了解的主要有以下三种&#xff1a; 1.UART&#xff08;串口&#xff09;&#xff0c;这种方式在单片机和pc之间进行传输都非常常见&#xff0c;效率比较…...

你的完美主义:从缺陷到超能力

所属专栏&#xff1a;《逻辑辨证系列》 前情回顾&#xff1a; 《完美还是完成》&#xff08;一&#xff09;&#xff1a;完成还是完美—完成大于完美 时间、机会、情绪成本 先完成 … 本期&#xff1a; 《完美还是完成》&#xff08;二&#xff09;&#xff1a;你的完美主…...

zsh: command not found: adb 报错问题解决

哈喽小伙伴们大家好&#xff0c;我是小李&#xff0c;今天&#xff0c;我满怀信心想要在本地跑一下pda,然而&#xff0c; what? 居然报错了&#xff01;&#xff01;别逗我啊&#xff01; 好吧&#xff0c;究其原因&#xff1a;没有配置好sdk 那就配呗。 首先&#xff0c;…...

应急响应靶机练习-Linux2

1.背景 前景需要&#xff1a;看监控的时候发现webshell告警&#xff0c;领导让你上机检查你可以救救安服仔吗&#xff01;&#xff01; 挑战内容&#xff1a; &#xff08;1&#xff09;提交攻击者IP &#xff08;2&#xff09;提交攻击者修改的管理员密码(明文) &#xff08;…...

进程间通信--匿名管道

进程间通信介绍 进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件&…...

ctfshow-xxs-316-333-wp

316.反射型 XSS&#xff08;-326都是反射型&#xff09; js恶意代码是存在于某个参数中&#xff0c;通过url后缀进行get传入&#xff0c;当其他用户点进这个被精心构造的url链接时&#xff0c;恶意代码就会被解析&#xff0c;从而盗取用户信息。 来看题&#xff0c;先简单测试…...

顺序表和链表的对比(一)

前言 今天给小伙伴们分享的是在数据结构中顺序表和链表的对比。它们在计算机科学和软件开发中具有广泛的应用&#xff0c;是理解更复杂数据结构&#xff08;如栈、队列、树、图等&#xff09;的基础。这次将会给大家从定义初始化&#xff0c;以及功能增删查改上进行详细对比&a…...