我想编写一个二分搜索函数,它将指向数组的指针作为输入并找到可搜索元素的索引。
uint8_t binary_search(uint8_t * array, uint8_t element);
但是我想传递给这个函数的数组有不同的类型(无符号8位,无符号16位,有符号8位等)
我正在考虑一种方法,可以将数组作为空指针传递,然后根据大小对其进行类型转换,但我无法找到正确的方法来实现它。
uint8_t binary_search(void * array, uint8_t element)
{
if(sizeof(array[0] == 1)
{
}
else if
.
.
.
}
最后一个选项是将多个数组传递给函数并再次根据大小进行选择,但我希望是否有更好的方法来处理这种情况。
任何帮助表示赞赏。谢谢!
使用比较功能。您还可以使用标准库中的 bsearch 函数,或编写类似的内容。
这里是一个例子。
int cmp_i8(void *first, void *second)
{
int8_t *fst = first;
int8_t *snd = second;
if (*fst < *second) return -1;
else if (*fst == *second) return 0;
else return 1;
}
uint8_t binary_search(void * array, uint8_t element,
int (*compare)(void *first, void *second));