【发布时间】:2018-04-29 11:03:30
【问题描述】:
C 中是否有内置函数用于搜索已排序的整数数组?
我可以轻松实现它,但它似乎很常见 - 如果没有库/内置 C 函数会很奇怪。
【问题讨论】:
C 中是否有内置函数用于搜索已排序的整数数组?
我可以轻松实现它,但它似乎很常见 - 如果没有库/内置 C 函数会很奇怪。
【问题讨论】:
stdlib.h实际上包含一些排序和搜索功能。 qsort 将让您对数组进行就地排序,bsearch 将为您对排序后的数组执行二进制搜索。在这两种情况下,您都必须提供比较功能。
【讨论】:
在有序数组https://www.tutorialspoint.com/c_standard_library/c_function_bsearch.htm中有二分查找bsearch()
例子:
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void *pa, const void *pb) {
int a = *(int *)pa;
int b = *(int *)pb;
return (a > b) - (a < b);
}
int values[] = { 5, 20, 29, 32, 63 };
int main () {
int *item;
int key = 32;
/* using bsearch() to find value 32 in the array */
item = (int*) bsearch (&key, values, 5, sizeof (int), cmpfunc);
if( item != NULL ) {
printf("Found item = %d\n", *item);
} else {
printf("Item = %d could not be found\n", *item);
}
return(0);
}
UPD @jonathan-leffler 添加了适当的比较器
【讨论】:
int cmp_int(const void *pa, const void *pb) { int a = *(int *)pa; int b = *(int *)pb; return (a > b) - (a < b); } 如果a 大于b,则返回+1,如果小于则返回-1,如果它们小于则返回0'重新平等。
您需要bsearch,此链接将带您进入手册以及该手册中提供的示例。或者,您可以在 linux 框中键入
man -a bsearch
【讨论】: