指针(6)---qsort函数

简介: 指针(6)---qsort函数

qsort函数的含义

qsort函数是一个排序函数,它是基于快速排序的算法来排序的。

qsort是一个库函数,是可以直接拿来使用的。所包含的头文件:stdlib.h

qsort函数的格式

void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));

该函数包含四个参数,按照前后顺序分别是

待排序数组的起始位置base

待排序数组的元素个数num

待排序数组的元素大小size

所遵循的排序规则*compar

接下来依次介绍

base

我们都知道数组的起始位置其实就是数组名,所以这里的含义其实也就是数组名的意思。而且由于可能要排序任意类型的数据,故设计成void*

num

一般来说我们计算数组的元素个数都是使用sizeof(arr) / sizeof(arr[0])这种类似的形式来表示

size

元素大小就是一个元素的大小,我们使用sizeof(该元素的类型)来表示

compar

排序规则可以说是这四个参数中最重要也是最难理解的一个,但实际上只要我们理解它作为一个规则的本质,也可以轻松理解。

排序实际上也就是对前后两个数的比较,然后根据规则将一个数排在前面一个在后面。

所以我们需要额外定义一个函数来实现比较compare。而*comapr也就是指向这个函数的指针。

举例:

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

这个比较函数应当返回一个负数、零或正数,分别表示a小于b、a等于b或a大于b。

同时在返回值中我们要进行强制类型转换成char*,达到跳过字节的作用,这样才能实现排序(数据位置的调换),同时需要注意的是,一般都是使用char*,因为char类型的字节大小是1,是最灵活的,像int类型字节大小是2,它不能实现非2倍数的数据调换例如7字节。

qsort函数按照比较函数的规则对数组进行排序,然后将排序结果保存在原数组中。

qsort函数的应用包括但不限于:

  1. 对整型、浮点型、字符型等基本数据类型的数组进行排序。
  2. 对自定义数据类型的数组进行排序,只需提供相应的比较函数。
  3. 对结构体数组进行排序,可以根据结构体的某个成员变量进行排序。
  4. 对指针数组进行排序,可以按照指针指向的值进行排序。
目录
相关文章
|
20天前
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
20天前
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。
|
1月前
|
C++
指针中的回调函数与qsort的深度理解与模拟
本文详细介绍了回调函数的概念及其在计算器简化中的应用,以及C++标准库函数qsort的原理和使用示例,包括冒泡排序的模拟实现。
15 1
|
1月前
利用指针函数
【10月更文挑战第2天】利用指针函数。
17 1
|
1月前
|
算法 搜索推荐 C语言
【C语言篇】深入理解指针4(模拟实现qsort函数)
【C语言篇】深入理解指针4(模拟实现qsort函数)
21 2
|
2月前
|
Linux
在Linux内核中根据函数指针输出函数名称
在Linux内核中根据函数指针输出函数名称
|
3月前
|
程序员 C语言
指针在函数参数和返回值中的使用
指针在函数参数和返回值中的使用
47 9
|
3月前
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
|
5月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
47 0
|
5月前
|
C语言
C语言中的函数指针、指针函数与函数回调
C语言中的函数指针、指针函数与函数回调