C语言中的排序函数351


排序函数在计算机编程中非常重要,它们允许开发者对数据结构中的元素进行整理和组织。C语言提供了广泛的排序函数,这些函数可以有效地对各种数据类型进行排序。

qsort()函数

qsort()函数是最常用的C语言排序函数之一。它使用快速排序算法,以O(n log n)的时间复杂度对数组中的元素进行排序。qsort()函数的原型如下:```c
void qsort(void *array, size_t nitems, size_t size, int (*compar)(const void *, const void *));
```

其中:* `array`:要排序的数组的起始地址。
* `nitems`:数组中元素的数量。
* `size`:每个元素的大小(以字节为单位)。
* `compar`:比较函数,用于比较数组中的元素。

bsearch()函数

bsearch()函数用于在一个已排序的数组中搜索一个元素。它使用二分查找算法,以O(log n)的时间复杂度执行搜索。bsearch()函数的原型如下:```c
void *bsearch(const void *key, const void *array, size_t nitems, size_t size, int (*compar)(const void *, const void *));
```

其中:* `key`:要搜索的元素。
* `array`:要搜索的已排序数组的起始地址。
* `nitems`:数组中元素的数量。
* `size`:每个元素的大小(以字节为单位)。
* `compar`:比较函数,用于比较数组中的元素。

lsearch()函数

lsearch()函数用于在一个已排序的链表中搜索一个元素。它使用线性搜索算法,以O(n)的时间复杂度执行搜索。lsearch()函数的原型如下:```c
void *lsearch(const void *key, void *base, size_t *nitems, size_t size, int (*compar)(const void *, const void *));
```

其中:* `key`:要搜索的元素。
* `base`:要搜索的已排序链表的起始地址。
* `nitems`:链表中元素的数量。
* `size`:每个元素的大小(以字节为单位)。
* `compar`:比较函数,用于比较链表中的元素。

自定义排序函数

除了这些标准库函数之外,开发者还可以编写自己的自定义排序函数。这可以为特定应用程序或数据结构提供更有效的排序。自定义排序函数只需实现以下原型:```c
int compar(const void *a, const void *b);
```

其中:a和b是待比较的两个元素的地址。比较函数应返回以下值:* -1,如果a小于b。
* 0,如果a和b相等。
* 1,如果a大于b。

示例

以下示例演示如何使用qsort()函数对一个整数数组进行排序:```c
#include
#include
int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main() {
int numbers[] = {5, 2, 8, 3, 1};
int n = sizeof(numbers) / sizeof(numbers[0]);
qsort(numbers, n, sizeof(int), compare);
for (int i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
return 0;
}
```

输出:```
1 2 3 5 8
```

2024-10-26


上一篇:C 语言下的汉字输入与输出

下一篇:C 语言输出大写字母