前言
可能有一些小伙伴不会使用或者不了解qsort函数的使用,这一期带大家细讲一下qsort函数!
qsort函数介绍
qsort函数是C语言提供一个库函数,主要用于排序各种类型的数据,是一个通用的排序函数,排序内核思想使用的是快速排序。
头文件 - include<stdlib.h>
描述
C 库函数void qsort(void base, size_t nitems, size_t size, int (compar)(const void , const void)) 对数组进行排序
声明
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
参数
- base -- 指向要排序的数组的第一个元素的指针。
- nitems -- 由 base 指向的数组中元素的个数。
- size -- 数组中每个元素的大小,以字节为单位。
- compar -- 用来比较两个元素的函数。
返回值
该函数不返回任何值。
qsort函数使用方法
==qsort要求提供一个自己定义的比较函数==
⭐️比如一个整形数组进行排序
int arr[6]={3,2,5,4,1,6};
int cmp_int (const void* e1 , const void* e2)//注意参数形式是固定的
{ //我们要进行强制类型转换
int *e1=(int *)e1;
int *e2=(int *)e2;
return *e1-*e2;
}
qsort(arr,6,sizeof(arr[0]),cmp_int);
//这里的sizeof(arr[0])也可直接写成4,前提知道是给int型排序
**如果cmp_int返回值小于0(< 0),那么e1所指向元素会被排在e2所指向元素的前面,也就是升序
如果cmp_int返回值等于0(= 0),那么e1所指向元素与e2所指向元素的顺序不确定
如果cmp_int返回值大于0(> 0),那么e1所指向元素会被排在e2所指向元素的后面**
⭐️比如对char类型排序
char arr[6];
int cmp_char(const void* e1 , const void* e2) //参数格式固定
{
//强制类型转换
char* a = (char*)_a;
char* b = (char*)_b;
return *a - *b;
}
qsort(arr,6,sizeof(arr[0]),cmp_char);
//同样这里sizeof(arr[0])也可直接写1,因为知道是char类型
⭐️对字符串类型
char arr[40][20];
int cmp_string(const void* e1 , const void* e2) //参数格式固定
{
return strcmp(((char*)e1), ((char*)e2));
}
qsort(arr,40,sizeof(arr[0]),cmp_string);
⭐️对于结构体类型
你要确认根据什么排序,我这里示范就根据名字name进行排序
struct stu
{
char six[20];
char name[20];
int age;
};
struct stu s[3] = { {"zhangsan", 30},{"lisi", 34},{"wangwu", 20} };
int cmp_name(const void* e1 , const void* e2) //参数格式固定
{
return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
int count=sizeof(s) / sizeof(s[0])
qsort(s, count, sizeof(s[0]), cmp_name);