0
点赞
收藏
分享

微信扫一扫

C语言库函数qsort的使用

霍华德 2023-01-25 阅读 104

前言

qsort是C语言的库函数,使用前需包含头文件#include<stdlib.h>,函数原型是

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );它的功能是对不同数据的快速排序

一、参数解释

1.void *base

前言里说到,qsort函数可以对不同数据类型的数据快速排序,因此base接收的是排列元素的首地址,void*可以理解为元素可以是任一类型的指针

2.size_t num

该参数表示排列元素的个数

3.size_t width

表示每个元素所占字节大小

4.int (__cdecl *compare )(const void *elem1, const void *elem2 )

该参数是一个函数指针,指向的是两个函数参数是 const void*类型,返回类型为int的函数,该函数被称为比较函数,该函数只有在返回值大于0时才会置换

比较函数的参数类型和返回类型都是固定的,const void* 中,const保证不会改变传过来的数据,void*则可以接收任一类型的指针,

在使用qsort函数时,比较函数需根据不同类型的数据进行不同的返回设计,在返回值大于0时才会置换

二、void*类型解释

​void类型被称为空类型指针,因此它可以接收任一类型的指针,但是void类型的数据无法解引用(不确定类型)和加减操作(不确定所占字节大小)

三、函数的使用

1.整型数据排序

int cmp_int(const void* e1,const void* e2)

{

return (*(int*)e1) - (*(int*)e2);

}
int main(){
int arr[5] = { 5,4,3,2,1 };

qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), cmp_int);

for (int i = 0; i < 5; i++)

{

printf("%d ", arr[i]);

}
}


2.结构体整型数据排序

​struct Std {

int age;

char name;

int sex;

};
int main
{
struct Std s[3] = { {10,"zs",1},{20,"ls",1},{30,"ww",0} };

qsort(s, sizeof(s)/ sizeof(s[0]), sizeof(s[0]), cmp_struct);

for (int i = 0; i < 3; i++)

{

printf("%d ", s[i].age);

}
}

3.结构体字符数据大小排序

​struct Std {

int age;

char name[10];

int sex;

};

int cmp_structchar(const void* e1, const void* e2)

{

return strcmp(((struct Std*)e1)->name, ((struct Std*)e2)->name);

}
int main()
{
struct Std s[3] = { {10,"zss",1},{20,"ls",1},{30,"wssw",0} };



qsort(s, sizeof(s)/ sizeof(s[0]), sizeof(s[0]), cmp_structchar);

for (int i = 0; i < 3; i++)

{

printf("%s ", s[i].name);

}
}

举报

相关推荐

0 条评论