新手快速上手掌握基础排序<二>快速排序快速入门

news/2024/11/8 0:51:43/

目录

引言 

一:快速排序qsort的简介

1.qsort是一个库函数

2.库函数的查询了解方法

3.qsort的具体使用方法 

4.qsort函数使用的一些注意点 

5.qsort函数的特点

6.代码实现

(1)整数数组的快速排序

(2)结构体的快速排序(学号和姓名两种)

7.感谢观看 


听说看到日落金山的人,接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

引言 

在了解基本的冒泡法,选择法之后,我们知道这两种方法只能排序单一类型数据,如果是多种类型的话,则感到无力,接下来我们将介绍一种更高效的方法---快速排序qsort

一:快速排序qsort的简介

1.qsort是一个库函数
2.库函数的查询了解方法

使用cpplusplus,c/c++官方网站

3.qsort的具体使用方法 

  

4.qsort函数使用的一些注意点 

由上面得知

void qsort(void *base, //指向需要排序的数组的第一个元素

size_t num,//排序的元素个数

size_t size //一个元素的大小,单位是字节

int (*cmp)(const void *p1,const void *p2)//函数指针类型--这个函数指针指向的函数,能够比较base指向数组中的两个元素

特别注意:void *的指针为无具体类型的指针,可以接收任意类型的地址,不能直接解引用的,也不能直接进

行指针计算的需要强制转换为需要的类型

5.qsort函数的特点

(1)快速排序的方法

(2)适合于任意类型数据的排序

(3)默认是升序排序

6.代码实现
(1)整数数组的快速排序
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define N 5
int com(const void* p1, const void* p2)
{return (*(int*)p1 - *(int*)p2);//降序的话则改为 return (*(int*)p2-*(int*)p1);
}
int main()
{int a[N] = { 0 };int i = 0;for (i = 0; i < N; i++){scanf("%d", &a[i]);}qsort(a, N, sizeof(a[0]), com);for (i = 0; i < N; i++){printf("%d ", a[i]);}return 0;
}

  

降序排序的话则如上改动就行 

(2)结构体的快速排序(学号和姓名两种)

#include <stdio.h>
#include <stdlib.h>
#define N 3
struct Student
{int num;//学号char name[20];//姓名
};
int com_num(const void* p1, const void* p2)
{return ((struct Student *)p1)->num-((struct Student *)p2)->num;
}
int main()
{struct Student s[N];int i = 0;for (i = 0; i < N; i++){scanf("%d%s", &s[i].num, s[i].name);}qsort(s, N, sizeof(s[0]), com_num);//学号比较for (i = 0; i < N; i++){printf("%5d%8s\n", s[i].num, s[i].name);}return 0;
}

 程序结果为


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
struct Student
{int num;//学号char name[20];//姓名
};
int com_name(const void* p1, const void* p2)
{return strcmp(((struct Student*)p1)->name, ((struct Student*)p2)->name);
}
int main()
{struct Student s[N];int i = 0;for (i = 0; i < N; i++){scanf("%d%s", &s[i].num, s[i].name);}qsort(s, N, sizeof(s[0]), com_name);//姓名比较for (i = 0; i < N; i++){printf("%5d%8s\n", s[i].num, s[i].name);}return 0;
}

程序运行结果为 

7.感谢观看 


http://www.ppmy.cn/news/1287217.html

相关文章

python+django校园篮球论坛交流系统v5re9

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 技术栈 系统权限按管理员和用户这两类涉及用户划分。 (a) 管理员&#xff1b;管理员使用本系统涉到的功能主要有&#xff1a;首页、个人中…

电子邮件地址填写指南:格式与常见问题解答

一个专业的电子邮件地址是一个你只用于工作目的的通信帐户。当你给收件人发送电子邮件时&#xff0c;这是他们最先看到的细节之一。无论你的职位或行业如何&#xff0c;拥有一个专业的电子邮件地址都可以提高你和所在公司的可信度。 在本文中我们解释了专业的电子邮件地址是什么…

游戏任务系统实现思路

文章目录 一、需求介绍二、数据库设计3、代码部分实现 一、需求介绍 1、首先任务的类型不同&#xff0c;可以分为&#xff1a;日常任务、成长任务、活动任务等等。 2、当达到任务目标时&#xff0c;自动发放任务奖励。 3、任务需要后台可配置&#xff0c;例如&#xff1a;任务…

物联网协议Coap之Californium CoapServer解析

目录 前言 一、CoapServer对象 1、类对象定义 2、ServerInterface接口 3、CoapServer对象 二、CoapServer服务运行分析 1、CoapServer对象实例化 1.1 调用构造方法 1.2 生成全局配置 1.3 创建Resource对象 1.4-1.8、配置消息传递器、添加CoapResource 1.9-1.12 创建线…

【LeetCode:17. 电话号码的字母组合 | 递归 + 回溯 + 组合】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Redis(认识NoSQL,认识redis,安装redis,redis桌面客户端,redis常见命令,redis的Java客户端)

文章目录 Redis快速入门1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端…

【Java基础系列】body参数前后端不一致

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Python编程者的元旦狂欢:一场别样的烟花盛宴

文章目录 一、前言二、实现步骤1.前期准备2.部分代码2.1 窗口设置2.2 烟花类 Firework2.3 粒子类 Particle2.4 轨迹类 Trail2.5 更新函数2.6 导入音频2.7 显示元旦快乐2.8 Esc键结束 3.完整代码&#xff08;详细注释&#xff09;4.视频效果5.可执行文件 三、总结 一、前言 202…