C语言qsort()函数的使用方法详解
简介
qsort
是C语言中的一个标准库函数,用于排序一段内存区域中的元素。通过自定义比较函数,可以实现对各种类型数据的排序。
函数原型
以下是qsort
的函数原型:
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
void* base
:指向需要排序的数组的第一个元素的指针。
size_t nitems
:数组中元素个数。
size_t size
:每个元素的大小,以字节为单位。
int (*compar) (const void *, const void *)
:指向比较函数的指针。
比较函数
compar
函数是我们需要自定义的,它需要接收两个参数并返回一个整数。比较的原则是返回一个小于、等于或大于0的整数,来表示相应的类型数据的大小关系。
以下是示例代码:
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
以上是一个简单的比较函数,比较两个整数的大小关系。在这个函数中,我们先进行了类型转换并通过指针取值得到传入的参数对应的实际值,然后对两个参数进行大小比较,返回结果。
两条示例说明
示例1:对整数数组进行升序排序
下面是一个简单的示例,对一个整数数组进行升序排序:
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int nums[] = {5, 2, 8, 3, 1};
// 求数组长度
int len = sizeof(nums) / sizeof(nums[0]);
// 排序
qsort(nums, len, sizeof(int), compare);
// 输出排序后结果
for(int i = 0; i < len; i++) {
printf("%d ", nums[i]);
}
return 0;
}
以上代码中,我们定义了一个整数数组nums
,并定义了一个比较函数compare
。我们将数组指针、数组长度、单个元素的大小和比较函数传入qsort
函数中,即可实现升序排列。
示例2:对结构体数组按字符串长度进行排序
下面是一个更复杂的示例,对一个结构体数组按照姓名字符串长度进行排序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[20];
int age;
} Person;
int compare(const void *a, const void *b) {
const Person *p1 = (const Person*)a;
const Person *p2 = (const Person*)b;
return (strlen(p1->name) - strlen(p2->name));
}
int main() {
Person people[] = {
{"Tom", 20},
{"Jackie", 18},
{"Jimmy", 22},
{"John", 25},
{"Kevin", 19}
};
// 求数组长度
int len = sizeof(people) / sizeof(people[0]);
// 排序
qsort(people, len, sizeof(Person), compare);
// 输出排序后结果
for(int i = 0; i < len; i++) {
printf("%s %d\n", people[i].name, people[i].age);
}
return 0;
}
以上代码中,我们定义了一个结构体Person
,其中包含姓名和年龄两个成员变量。我们定义了一个比较函数compare
,将结构体指针转换成Person
类型指针,然后按照姓名字符串长度进行比较。最后,传入结构体指针、数组长度、单个元素的大小和比较函数进行排序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言qsort()函数的使用方法详解 - Python技术站