如何写出优雅的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

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav