qsort快速排序函数
1.qsort
函数简介
qsort
是C标准库中的一个函数,用于对数组进行快速排序。它定义在头文件<stdlib.h>
中。qsort
函数的原型如下:
void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
- 参数说明:
base
:指向要排序的数组的指针,即数组首元素地址num
:数组中的元素个数。size
:每个元素的大小(以字节为单位)。compar
:指向比较函数的指针,该函数用于确定两个元素的相对顺序。
官方英文版参数说明:
-
base
:Pointer to the first object of the array to be sorted, converted to avoid*
. -
num
:Number of elements in the array pointed to by base. size_t is an unsigned integral type.
-
size
:Size in bytes of each element in the array. size_t is an unsigned integral type.
-
compar
:Pointer to a function that compares two elements.This function is called repeatedly by qsort to compare two elements.
2. 比较函数
比较函数是一个用户自定义的函数,用于比较两个元素。它的原型如下:
int compar(const void *a, const void *b);
- 参数说明:
a
和b
:指向要比较的两个元素的指针。
- 返回值:
- 如果
a
小于b
,则返回负值。 - 如果
a
等于b
,则返回0。 - 如果
a
大于b
,则返回正值。
- 如果
3. 1示例代码
下面是一个使用qsort
函数对整数数组进行排序的例子:
#include <stdio.h>
#include <stdlib.h>
// 比较函数,用于比较两个整数的大小
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b); //用于升序排序
// return (*(int *)b - *(int *)a); 用于降序排序
}
int main() {
int arr[] = {5, 2, 9, 1, 5, 6};
size_t arr_size = sizeof(arr) / sizeof(arr[0]);
printf("排序前的数组: ");
for (size_t i = 0; i < arr_size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 调用qsort函数进行排序
qsort(arr, arr_size, sizeof(int), compare);
printf("排序后的数组: ");
for (size_t i = 0; i < arr_size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
4. 1运行结果
编译并运行上述程序,输出结果如下:
排序前的数组: 5 2 9 1 5 6
排序后的数组: 1 2 5 5 6 9
3. 2示例代码
下面是一个使用qsort
函数对结构体数组进行降序排序的例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义一个结构体类型
typedef struct {
char name[50];
int age;
} Person;
// 比较函数,用于比较两个Person结构体的age字段,按降序排序
int compare(const void *a, const void *b) {
Person *personA = (Person *)a;
Person *personB = (Person *)b;
return personB->age - personA->age; // 降序排序
}
int main() {
// 初始化结构体数组
Person people[] = {
{"Alice", 30},
{"Bob", 25},
{"Charlie", 35},
{"David", 20}
};
size_t people_size = sizeof(people) / sizeof(people[0]);
printf("排序前的数组:\n");
for (size_t i = 0; i < people_size; i++) {
printf("Name: %s, Age: %d\n", people[i].name, people[i].age);
}
// 调用qsort函数进行排序
qsort(people, people_size, sizeof(Person), compare);
printf("\n排序后的数组:\n");
for (size_t i = 0; i < people_size; i++) {
printf("Name: %s, Age: %d\n", people[i].name, people[i].age);
}
return 0;
}
4. 2运行结果
编译并运行上述程序,输出结果如下:
排序前的数组:
Name: Alice, Age: 30
Name: Bob, Age: 25
Name: Charlie, Age: 35
Name: David, Age: 20
排序后的数组:
Name: Charlie, Age: 35
Name: Alice, Age: 30
Name: Bob, Age: 25
Name: David, Age: 20
标签:people,int,void,qsort,排序,size
From: https://blog.csdn.net/2301_81570594/article/details/143796990