C 语言快速排序算法

news2025/1/12 10:49:24

升序排序


/*
   快速排序算法排序规则
*/
int32_t CmpCb(const void* _a, const void* _b)
{
	uint16_t* a = (uint16_t*)_a;
	uint16_t* b = (uint16_t*)_b;
	int32_t val = 0;
	if (*a > *b)
	{
		val = 1;
	}
	else if (*a < *b)
	{
		val = -1;
	}
	else 
	{
		val = 0;
	}
	return val;
}


int main() 
{
	// 创建局部数组
	uint16_t num[10] = { 5,7,8,1,26,52,9,3,14,56 };
	uint16_t sz = sizeof(num) / sizeof(num[0]);
	// C语言库函数提供的排序函数
	qsort(num, sz, sizeof(num[0]), CmpCb);
	// for循环打印输出排序玩成后的数据
	for (uint8_t i = 0; i < sz; i++) 
	{
		printf("num[%d] = %d.\n",i,num[i]);
	}
}

 结果:



降序排序


#define _CRC_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

/*
   快速排序算法排序规则
*/

#if 0

	int32_t CmpCb(const void* _a, const void* _b)
	{
		uint16_t* a = (uint16_t*)_a;
		uint16_t* b = (uint16_t*)_b;
		int32_t val = 0;
		if (*a > *b)
		{
			val = 1;
		}
		else if (*a < *b)
		{
			val = -1;
		}
		else 
		{
			val = 0;
		}
		return val;
	}
#else
/*
   快速排序算法排序规则
*/
int32_t CmpCb(const void* _a, const void* _b)
{
	uint16_t* a = (uint16_t*)_a;
	uint16_t* b = (uint16_t*)_b;
	int32_t val = 0;
	if (*a > *b)
	{
		val = -1;
	}
	else if (*a < *b)
	{
		val = 1;
	}
	else
	{
		val = 0;
	}
	return val;
}

#endif

int main() 
{
	// 创建局部数组
	uint16_t num[10] = { 5,7,8,1,26,52,9,3,14,56 };
	uint16_t sz = sizeof(num) / sizeof(num[0]);
	// C语言库函数提供的排序函数
	qsort(num, sz, sizeof(num[0]), CmpCb);
	// for循环打印输出排序玩成后的数据
	for (uint8_t i = 0; i < sz; i++) 
	{
		printf("num[%d] = %d.\n",i,num[i]);
	}
}

结果:


结构体排序

#define _CRC_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

// 排序结构体
typedef struct
{
	uint16_t id;
	uint8_t score;
}StuInfo_t;

#if 0

	int32_t CmpCb(const void* _a, const void* _b)
	{
		uint16_t* a = (uint16_t*)_a;
		uint16_t* b = (uint16_t*)_b;
		int32_t val = 0;
		if (*a > *b)
		{
			val = 1;
		}
		else if (*a < *b)
		{
			val = -1;
		}
		else 
		{
			val = 0;
		}
		return val;
	}
#else

/*
 快速排序算法排序规则
*/
int32_t CmpCb(const void* _a, const void* _b)
{
	uint16_t* a = (uint16_t*)_a;
	uint16_t* b = (uint16_t*)_b;
	int32_t val = 0;
	if (*a > *b)
	{
		val = -1;
	}
	else if (*a < *b)
	{
		val = 1;
	}
	else
	{
		val = 0;
	}
	return val;
}


int32_t StuCmpCb(const void* _a, const void* _b)
{
	StuInfo_t* a = (StuInfo_t*)_a;
	StuInfo_t* b = (StuInfo_t*)_b;
	int32_t val = 0;
	if (a->score > b->score)
	{
		val = -1;
	}
	else if (a->score < b->score)
	{
		val = 1;
	}
	else
	{
		val = 0;
	}
	return val;
}

#endif



int main() 
{
	// 创建局部数组
	uint16_t num[10] = { 5,7,8,1,26,52,9,3,14,56 };
	uint16_t sz = sizeof(num) / sizeof(num[0]);
	// C语言库函数提供的排序函数
	qsort(num, sz, sizeof(num[0]), CmpCb);
	// for循环打印输出排序玩成后的数据
	for (uint8_t i = 0; i < sz; i++) 
	{
		printf("num[%d] = %d.\n",i,num[i]);
	}
	// 定义一个结构体数组
	StuInfo_t stuInfo[5] =
	{
		{1,90},
		{2,95},
		{3,69},
		{4,70},
		{5,80}
	};
	// C语言库函数提供的排序函数
	qsort(stuInfo, 5, sizeof(stuInfo[0]), StuCmpCb);
	// for循环打印输出排序玩成后的数据
	for (uint8_t i = 0; i < 5; i++)
	{
		printf("student_id = %d, score = %d.\n", stuInfo[i].id, stuInfo[i].score);
	}

}

结果:


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968791.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++----类与对象(下)

当我们简单的学习了上一篇日期类。简单的理解并且使用了我们前面学习的知识。当然这还只是我们c的九牛一毛。并且我们的类与对象的知识还没学习完。今天我们来把类与对象的知识完善一下。 初始化列表 那么今天我们就不讲废话了&#xff0c;我们直接来主题。首先我们可以看到我…

大型语言模型入门

大型语言模型 快速、全面了解大型语言模型。学习李宏毅课程笔记。 ChatGPT 目前由OpenAI公司发明的非常火的人工智能AI应用ChatGPT&#xff0c;到底是什么原理呢&#xff1f; G&#xff1a;Generative(生成) P&#xff1a;Pre-trained(预训练) T&#xff1a;Transformer(一种…

手把手教你如何在Linux上轻松安装Python,告别编程入门难题

导语&#xff1a; Python作为当下最热门的编程语言之一&#xff0c;受到了越来越多人的喜爱。对于Linux用户来说&#xff0c;掌握如何在Linux上安装Python至关重要。今天&#xff0c;就让我带领大家一步步在Linux上安装Python&#xff0c;让你轻松迈入编程世界&#xff01; 一…

MATLAB(7)潮汐模型

一、前言 在MATLAB中模拟潮汐通常涉及到使用潮汐的理论模型&#xff0c;如调和常数模型&#xff08;Harmonic Constants Model&#xff09;&#xff0c;它基于多个正弦和余弦函数的叠加来近似潮汐高度随时间的变化。以下是一个简化的MATLAB代码示例&#xff0c;用于模拟一个基于…

centos在线安装部署2024年最新的docker版本

1.yum 包更新到最新 sudo yum update -y2.安装依赖软件包 sudo yum install -y yum-utils device-mapper-persistent-data lvm23.添加阿里的镜像&#xff0c;下载镜像速度比较快 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/dock…

docker compse简介与安装

目录 1. Docker Compose 简介 2. Docker Compose 安装 2.1 在 Ubuntu 上安装 Docker Compose 2.1.1 通过 apt 安装 2.1.2 使用官方脚本安装最新版本 2.2 在 CentOS 上安装 Docker Compose 2.2.2 使用官方脚本安装最新版本 2.2.3 使用 pip 安装 2.3 在 openEuler 上安装…

【跨时代】第四次工业革命彻底来袭!什么是AI+

你有没有一种很割裂的感觉&#xff0c;就是在短视频里&#xff0c;AI已经要改变全世界了 但自己一用&#xff0c;却发现只能和AI聊聊天 画几张图 难道是姿势不对&#xff1f;但具体是哪里不对呢。 作为一个老牌程序员&#xff0c;我前面分享了很多计算机相关内容&#xff0c;总…

java基础概念06-原码、反码、补码

一、八位二进制的取值范围&#xff08;没有符号位&#xff09; 二、原码 三、反码 若是反码的计算结果跨0了&#xff0c;则会溢出&#xff0c;计算结果又误差&#xff01; 原因&#xff1a;在反码当中0有两种表现形式&#xff1a; 解决方式&#xff1a;将反码中的两个0&#x…

SSM大学生体质管理系统-计算机毕业设计源码75960

摘要 基于SSM的大学生体质管理系统是一款综合性平台&#xff0c;融合了在线课程、健康知识、体测报告等多项功能&#xff0c;旨在为广大大学生提供全方位的健康管理服务。通过在线课程和健康知识模块&#xff0c;用户可以随时学习健康知识&#xff0c;掌握科学的健康管理方法&a…

推荐一个比较好的开源位置服务平台

平台简介 一直想做一款后台管理系统&#xff0c;同时可以管理人&#xff0c;车&#xff0c;物品&#xff0c;猫&#xff0c;狗&#xff0c;牛羊等一切可以移动的室外事物进行集中化管理&#xff0c;最初的需求聚焦——谁在哪儿&#xff01; 系统框架是基于当前最常用的RuoYi框架…

C# 设计模式之创建者模式

总目录 前言 在软件系统中&#xff0c;有时需要创建一个复杂对象&#xff0c;并且这个复杂对象由其各部分子对象通过一定的步骤组合而成。例如一个采购系统中&#xff0c;如果需要采购员去采购一批电脑时&#xff0c;在这个实际需求中&#xff0c;电脑就是一个复杂的对象&…

DVWA (SQL注入 low)

&#xff08;1&#xff09;判断注入是字符型还是数值型 判断恒为真&#xff0c;字符型&#xff0c;输出ures表中全部用户信息。 1 or 123 123 # &#xff08;2&#xff09;猜测SQL查询字段数 1后面加 闭合 id 查询的 &#xff0c;末尾加# 是注释了后面 的内容&#xff…

LLM智能体工程落地思考(一)

人工智能领域著名教授吴恩达在今年3月份红杉资本的人工智能峰会(AI Ascent)以及最近Snowflake峰会开发者日上都发表了关于AI Agent(人工智能体)的演讲。演讲中&#xff0c;其分享了对AI Agent未来发展潜力的展望。认为AI Agent能够让人工智能胜任更多种类的任务&#xff0c;甚至…

STL源码刨析:树的导览

目录 1.前言 2.关联式容器 3.二叉搜索树 4.平衡二叉搜索树 前言 在阅读了STL源码刨析系列的前几章&#xff0c;我们可以知道容器分为序列式容器和关联式容器。在前几个小节中&#xff0c;我们对序列式容器中的vector和list容器进行了讲解&#xff0c;并比较了vector和list的区别…

学习记录——day24 多线程编程

目录 多线程局部概念 线程支持函数&#xff08;多线程编程&#xff09; pthread_create&#xff1a;创建线程 pthread -self&#xff1a;线程号获取 pthread_exit&#xff1a;线程退出函数 pthread_jion&#xff1a;线程资源回收 pthred_detath&#xff1a;线程分离态 p…

检索增强生成(RAG):智能内容生成的新纪元

引言 在大 AI 时代&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;模型&#xff0c;尤其是大型语言模型&#xff08;LLM&#xff09;&#xff0c;已经展现出了令人瞩目的能力。然而&#xff0c;这些模型在提供信息的准确、即时、专业、权威等方面仍存在局限。检索增…

1.2、安装k8s-node1 和 k8s-node2节点虚拟机

k8s-master节点的虚拟机环境弄好之后&#xff0c;这小节继续介绍k8s-node1 和 k8s-node2节点虚拟机环境安装。 节点主机名ip主节点k8s-master172.31.0.10节点1k8s-node1172.31.0.11节点2k8s-node2172.31.0.12 在D:\vagrant目录下新建centos_stream_9_node1文件夹&#xff0c;然…

如何在Python中使用网页抓取API获得Google搜索结果

SERP是搜索引擎结果页的缩写&#xff0c;它是你在百度、谷歌、Bing等搜索引擎中提交查询后所得到的页面。搜索引擎需要给所有页面做排序&#xff0c;把最能解决我们需求的页面展示给我们&#xff0c;企业会非常关注结果页的排序&#xff0c;也就是本企业内容的自然排名情况。手…

革新IT架构管理,宝兰德全新中间件统一管理平台助力企业数字化转型

近期&#xff0c;宝兰德在金融行业科技盛会“2024中国国际金融展”上正式发布了拳头产品「中间件统一管理平台MCP2.0」&#xff0c;旨在推动业务与中间件解耦&#xff0c;解决中间件管理中的版本不统一、自动化程度低、监控不完善、运维效率低、管理分散等问题&#xff0c;实现…

8月1日学习笔记 java环境安装以及tomcat配置

一&#xff0c;java环境安装 1. 效果 2. 步骤 1. 下载 jdk22 # 官网地址 https://www.oracle.com/cn/java/technologies/download s/ wget https://download.oracle.com/java/22/latest/jdk- 22_linux-x64_bin.tar.gz 2. 解压 tar -zxvf jdk-22.2.tar.gz 3. 移动到 us…