C语言中qsort函数的使用,对结构体和字符串数组进行排序

您所在的位置:网站首页 数组结构体排序怎么排 C语言中qsort函数的使用,对结构体和字符串数组进行排序

C语言中qsort函数的使用,对结构体和字符串数组进行排序

2024-07-14 06:36:02| 来源: 网络整理| 查看: 265

qsort 函数是C语言提供的库排序函数,除了解决传统的int数组排序以外,还可以对字符串、结构体等进行排序。这里qsort函数也体现了之前说过的回调函数的机制

在库中长这么个样子:

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

先简单了解一波qsort函数

1)qsort函数包含在 stdlib.h中。

2) 函数参数,对照上述结构来看:

void *base

表示待排序序列的地址。void * 类型的指针变量意味着可以针对 int、char、struct 等各种类型序列。

size_t num

表示待排序列中关键字的个数。常用sizeof(a)/sizeof(a[0])的形式确定。

size_t size

表示待排序列中关键字的大小,单位为字节。 常用sizeof(a[0])确定。

int ( * comparator ) ( const void *, const void * )

表示 函数指针,该函数指针指向一个返回值为int 参数为两个指针常量的的函数 而这两个指针常量就是待比较的两个关键字。

------------------------------------------分割线-------------------------------------------------------

就使用来说最关键的是要自写一个“比较函数”作为第四个参数传入qsort函数。其中函数对应上述qsort中的形参,返回值必须是int 参数必须是两个指向关键字的指针 而函数返回值需要满足以下特性:

》当前一个关键字比后一个关键字小的时候 return 值 0;

注意点:void * 指针有两个典型的特性:

1)可以指向任何类型的变量。 2)void *类型的的指针不能进行解引用操作,因为无法确定类型就无法确定每个单元的字节数,当然也就不能对该指针变量进行偏移操作。因此对这种类型指针要解引用的时候需要强转类型。

上例子:

1)排序int数组

结果默认按照关键字升序排列。

#include #include //自写一个比较int类型序列的比较函数 int int_cmp(const void* p1,const void* p2) { //比较函数返回值要满足上述要求,这里直接返回两个关键字的差值即可 //但是如果直接写: return *p1-*p2; 这个写法是错误的无法通过编译,因为p1,p2是void*类型的指针是不可以直接解引用的!这里需要强转一下写成下面的代码: return *((int *)p1)-*((int*)p2);//若是 return *((int*)p2)- *((int *)p1);则降序 } int main() { //声明i用于控制遍历数组 int i=0; //初始化int数组 int Arr[]={5,6,7,4,3,1} //定义整型变量方便管理数组的元素个数 int sz=sizeof(Arr)/sizeof(Arr[0]); qsort(Arr,sz,sizeof(Arr[0],int_cmp);//待排序列地址、待排关键字个数、关键字大小、比较函数地址 四个参数都准备完毕,已经可以开始排序。 for(i=0;iname); } int main() { int i=0;// 用于遍历结构体数组 //定义结构体数组 STU stu[]={{20,"zhangmazi"},{40,"tangshiye"},{32,"huangsilang"}}; int sz=sizeof(stu)/sizeof(stu[0]); qsort(stu,sz,sizeof(stu[0]),cmp_by_name); for(i=0;i


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭