C语言库函数qsort的使用详解
什么是qsort函数?
qsort函数是C标准库中的一个排序函数,它可以对任意类型的数组进行排序。qsort函数需要5个参数,分别为待排序数组的首地址、元素的个数、元素大小、比较函数和可选的参数指针。
qsort函数使用步骤
第一步:编写比较函数
用于确定排序顺序的比较函数有两个参数,分别为需要比较的元素的指针。该函数需要返回一个整数值,用于指示比较结果:
- 如果第一个元素应该出现在第二个元素之前,则返回一个负整数;
- 如果第一个元素应该出现在第二个元素之后,则返回一个正整数;
- 如果两个元素相等,则返回零。
该函数的定义方式如下:
int compare(const void *a, const void *b) {
// 比较a和b指向的元素
}
第二步:调用qsort函数
调用qsort函数进行排序,qsort函数可以按照任何方式对元素进行排序。
qsort函数的原型如下:
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
参数说明:
void *base
:需要排序的数组首地址。size_t nmemb
:元素个数。size_t size
:每个元素的大小。int (*compar)(const void *, const void *)
:比较函数。
第三步:测试程序
实例程序:
#include <stdio.h>
#include <stdlib.h>
// 定义比较函数
int compare(const void *a, const void *b) {
// 将a和b强制转换为整数类型的指针,并获取指针指向的值
int x = *(int *)a;
int y = *(int *)b;
// 比较值的大小
return x - y;
}
int main() {
int arr[] = {54, 23, 87, 5, 41, 1, 98, 21};
int n = sizeof(arr) / sizeof(arr[0]);
// 调用qsort函数进行排序
qsort(arr, n, sizeof(int), compare);
// 输出排序结果
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
输出结果:
1 5 21 23 41 54 87 98
示例说明
示例一:字符串排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义比较函数
int compare(const void *a, const void *b) {
// 将a和b强制转换为指向字符串的指针,并获取指针指向的值
char *x = *(char **)a;
char *y = *(char **)b;
// 比较字符串大小,使用strcmp函数
return strcmp(x, y);
}
int main() {
char *str_arr[] = {"hello", "world", "apple", "banana", "orange", "pear"};
int n = sizeof(str_arr) / sizeof(str_arr[0]);
// 调用qsort函数进行排序
qsort(str_arr, n, sizeof(char *), compare);
// 输出排序结果
for (int i = 0; i < n; i++) {
printf("%s ", str_arr[i]);
}
return 0;
}
输出结果:
apple banana hello orange pear world
示例二:结构体排序
#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) {
// 将a和b强制转换为指向Person结构体的指针,并获取指针指向的结构体
Person *p1 = (Person *)a;
Person *p2 = (Person *)b;
// 比较年龄大小
return p1->age - p2->age;
}
int main() {
Person person_arr[] = {{"Tom", 20}, {"Jerry", 19}, {"Mary", 21}, {"Lisa", 18}};
int n = sizeof(person_arr) / sizeof(person_arr[0]);
// 调用qsort函数进行排序
qsort(person_arr, n, sizeof(Person), compare);
// 输出排序结果
for (int i = 0; i < n; i++) {
printf("%s %d\n", person_arr[i].name, person_arr[i].age);
}
return 0;
}
输出结果:
Lisa 18
Jerry 19
Tom 20
Mary 21
以上就是关于C语言库函数qsort的使用详解,包括比较函数的定义方法和调用qsort函数进行排序的步骤,并提供了字符串排序和结构体排序的示例代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言库函数qsort的使用详解 - Python技术站