`qsort()` 是 C 标准库中的一个快速排序函数,用于对数组进行排序。它的参数如下:
```c
void qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*))
```
- `base`:需要排序的数组指针。
- `num`:数组中元素的数量。
- `size`:每个元素的大小(字节数)。
- `compar`:用于指定比较函数的函数指针,用于比较两个元素的大小关系。
在代码中,我们把需要排序的活动存储在一个结构体数组中,即 `activities` 数组。因此,在调用 `qsort()` 函数时,我们把该数组作为第一个参数,并把数组长度 `n` 作为第二个参数。
对于第三个参数,它是每个元素的大小(字节数)。在本例中,每个元素是一个包含起始时间和结束时间的结构体类型。因此,我们使用 `sizeof(struct Activity)` 来获取结构体所占用空间大小。
最后一个参数是比较函数指针,这里我们使用自定义函数 `compareActivities()` 来比较两个活动根据结束时间之间的先后顺序。注意到它返回值为整型数值:
```c
int compareActivities(const void* a, const void* b) {
struct Activity* A = (struct Activity*)a;
struct Activity* B = (struct Activity*)b;
return A->end - B->end;
}
```
这是因为 `qsort()` 函数要求比较函数返回一个整数值,需要满足以下条件:
- 若 `a > b`,则返回正整数。
- 若 `a == b`,则返回 0。
- 若 `a < b`,则返回负整数。
在本例中,我们把比较函数的函数指针作为第四个参数传递给了 `qsort()` 函数。这样,在排序时就会根据结束时间(即上面代码中的 `end` 字段)来按从小到大的顺序排序。
qsort(activities, n, sizeof(struct Activity), compareActivities);
最新推荐文章于 2024-07-12 18:56:03 发布