如何写出优雅的C语言快速排序代码???你不会的这里都有???

2024-08-29 12:18

本文主要是介绍如何写出优雅的C语言快速排序代码???你不会的这里都有???,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何写出优雅的C语言快速排序代码???你不会的这里都有???

最近,在查找C99标准库的过程中,找到了一个超级好用的快速排序C函数。。。

学会使用后,顺便做点笔记。。。

库函数原型声明如下:

void qsort( void *ptr, size_t count, size_t size,int (*comp)(const void *, const void *) );

Parameters
ptr - pointer to the array to sort
count - number of elements in the array
size - size of each element in the array in bytes
comp - comparison function which returns ​a negative integer value if the first argument is less than the second, a positive integer value if the first argument is greater than the second and zero if the arguments are equivalent.
The signature of the comparison function should be equivalent to the following:

int cmp(const void *a, const void *b);

The function must not modify the objects passed to it and must return consistent results when called for the same objects, regardless of their positions in the array.

整理知识点后发现

,如下:
1 void ptr
2 size_t count
3 size_t size
4 void *
5 const void

6 int (comp) (const void, const void*)

知识点1、4: void ptr
关于void
的知识点,前一篇博客“使用C语言比较两个元素的值,你真的学会了吗???”使用C语言比较两个元素的值,你真的学会了吗???中,已经介绍过了,不在重复做笔记。。。

知识点2、3:size_t count
size_t类型,查找库函数后,做了如下笔记:

size_t can store the maximum size of a theoretically possible object of any type (including array).
size_t声明的变量可存储C语言任意类型可声明对象的最大大小。
看到这里,是不是很牛逼???
平时,使用int,unsigned int,long int,long long int总感觉内存开的不够大,万一内存溢出了,肿么办???

size_t is commonly used for array indexing and loop counting. Programs that use other types, such as unsigned int, for array indexing may fail on, e.g. 64-bit systems when the index exceeds UINT_MAX or if it relies on 32-bit modular arithmetic.
size_t通常用于数组的索引和循环计数。

这个知识点是冷门知识点,嘿嘿。。。

学会使用size_t后,困惑都少了不少。
举例:

#include <stdio.h>
#include <stddef.h>
#include <stdint.h>int main(void)
{const size_t N = 100;int numbers[N];for (size_t ndx = 0; ndx < N; ++ndx)numbers[ndx] = ndx;printf("SIZE_MAX = %zu\n", SIZE_MAX);size_t size = sizeof numbers;printf("size = %zu\n", size);
}

输出结果为:
SIZE_MAX = 18446744073709551615
size = 400

赶紧做笔记。。。

知识点5:const void*
关于const的声明和使用,这里就不多说了。比较麻烦。。。
具体做一点笔记,这里使用const是用于比较两个数的值。加了const后,可保护void*类型变量不会在程序运行时被修改取值。
就这么多吧。。。

示例代码:

/*qsort_ex01.c*/#include <stdio.h>
#include <stdlib.h>
#include <limits.h>int compare_ints(const void* a, const void* b)
{int arg1 = *(const int*)a;int arg2 = *(const int*)b;if (arg1 < arg2) return -1;if (arg1 > arg2) return 1;return 0;
}int ints[] = { -2, 99, 0, -743, 2, INT_MIN, 4 };
int size = sizeof ints / sizof *ints; 
qsort(ints, siz, sizeof(int), compre_ints);
for (int i = 0; i < size; i++) {printf("%d ", ints[i]);
}
printf("\n");

输出结果为:
-2147483648 -743 -2 0 2 4 99

怎么样,是不是用的很顺手。。。

笔记做到这里,也差不多了,未完待续。。。

在这里插入图片描述

这篇关于如何写出优雅的C语言快速排序代码???你不会的这里都有???的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117834

相关文章

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚