qsort函数是C标准库中提供的用于进行排序的函数,其声明如下:
1 2
| void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
|
这里是各个参数的解释:
- base: 待排序数组的起始地址(指向数组的指针)。
- nmemb: 数组中元素的数量。
- size: 每个元素的大小(以字节为单位)。
- compar: 比较函数的指针,用于定义元素的顺序。比较函数的原型应该是
int compar(const void *a, const void *b),并且满足以下条件:
- 如果
a 应该排在 b 前面,返回负值。
- 如果
a 和 b 相等,返回零。
- 如果
a 应该排在 b 后面,返回正值。
升序排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <stdio.h> #include <stdlib.h>
int compare(const void *a, const void *b) { return (*(int*)a - *(int*)b); }
int main() { int arr[] = {5, 2, 8, 4, 1, 7, 3, 6}; int n = sizeof(arr) / sizeof(arr[0]);
qsort(arr, n, sizeof(int), compare);
printf("Sorted array: "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); }
return 0; }
|
降序排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <stdio.h> #include <stdlib.h>
// 降序排序的比较函数 int compare_desc(const void *a, const void *b) { return (*(int*)b - *(int*)a); }
int main() { int arr[] = {5, 2, 8, 4, 1, 7, 3, 6}; int n = sizeof(arr) / sizeof(arr[0]);
// 使用比较函数进行降序排序 qsort(arr, n, sizeof(int), compare_desc);
printf("Sorted array (descending order): "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); }
return 0; }
|