C语言中qsort函数的介绍与用法实例
什么是qsort函数?
在C语言中,qsort函数是用于对数组进行排序的函数。它被定义在stdlib.h中,具有如下形式:
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
其中参数含义如下:
base
: 待排序数组的指针,指向数组的首地址。nmem
: 数组元素的个数。size
: 数组元素的大小(字节数)。compar
: 用于比较数组元素大小的函数指针。
使用步骤
- 定义一个待排序的数组,确定元素个数和元素类型。
- 定义一个比较函数。
- 调用
qsort()
函数进行排序。
一个简单的示例
下面是一个简单的示例,其中我们使用qsort()
函数对一个由字符串组成的数组进行排序,按字典序从小到大排序。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void *a, const void *b) {
return strcmp(*(const char **)a, *(const char **)b);
}
int main() {
const int N = 5;
const char *arr[N] = {"apple", "banana", "pear", "orange", "grape"};
qsort(arr, N, sizeof(char *), compare);
for (int i = 0; i < N; i++) {
printf("%s ", arr[i]);
}
printf("\n");
return 0;
}
输出结果为:
apple banana grape orange pear
另一个示例
下面是另一个示例,其中我们使用qsort()
函数对一个由结构体组成的数组进行排序。
#include <stdio.h>
#include <stdlib.h>
struct Student {
char name[50];
int age;
float score;
};
int compare(const void *a, const void *b) {
const struct Student *p = (const struct Student *)a;
const struct Student *q = (const struct Student *)b;
if (p->score != q->score) {
return q->score - p->score;
} else if (p->age != q->age) {
return p->age - q->age;
} else {
return strcmp(p->name, q->name);
}
}
int main() {
const int N = 3;
struct Student arr[N] = {
{"Tom", 20, 80.5},
{"Mary", 21, 89.0},
{"John", 20, 80.5}
};
qsort(arr, N, sizeof(struct Student), compare);
for (int i = 0; i < N; i++) {
printf("%s %d %f\n", arr[i].name, arr[i].age, arr[i].score);
}
return 0;
}
输出结果为:
Mary 21 89.000000
John 20 80.500000
Tom 20 80.500000
在这个例子中,我们首先定义了一个名为Student
的结构体,包含名称、年龄和分数三个成员。我们然后定义一个包含三个Student
结构体的数组,并按分数从高到低、年龄从小到大、名称从小到大的顺序排列。我们可以使用qsort()
函数将其实现,通过定义一个以两个结构体作为参数并返回整数的比较函数,来指定元素的顺序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中qsort函数的介绍与用法实例 - Python技术站