qsort函数是C标准库中提供的用于进行排序的函数,其声明如下:

1
2
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));

这里是各个参数的解释:

  1. base: 待排序数组的起始地址(指向数组的指针)。
  2. nmemb: 数组中元素的数量。
  3. size: 每个元素的大小(以字节为单位)。
  4. compar: 比较函数的指针,用于定义元素的顺序。比较函数的原型应该是 int compar(const void *a, const void *b),并且满足以下条件:
    • 如果 a 应该排在 b 前面,返回负值。
    • 如果 ab 相等,返回零。
    • 如果 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;
}