指针(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进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
17天前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
14 1
|
17天前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
13 1
|
24天前
|
存储 C语言
字符指针作为函数参数
字符指针作为函数参数
26 2
|
24天前
|
存储 算法 C++
函数的指针:理解与应用
函数的指针:理解与应用
9 1
|
24天前
|
存储 C语言
指针数组作为main函数的形参
指针数组作为main函数的形参
9 0
|
24天前
|
存储 C语言
指针变量作为函数参数
指针变量作为函数参数
11 0
|
24天前
|
C语言
怎样定义和使用指向函数的指针变量
怎样定义和使用指向函数的指针变量
9 0
|
24天前
|
算法 C语言
使用指向函数的指针作为函数参数
使用指向函数的指针作为函数参数
14 0
|
24天前
|
C++
结构体变量与结构体变量指针作为函数参数
结构体变量与结构体变量指针作为函数参数
11 0