二分查找功能,接受不同类型的数组

问题描述 投票:0回答:1

我想编写一个二分搜索函数,它将指向数组的指针作为输入并找到可搜索元素的索引。

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
  .
  .
  .
}

最后一个选项是将多个数组传递给函数并再次根据大小进行选择,但我希望是否有更好的方法来处理这种情况。

任何帮助表示赞赏。谢谢!

c function binary-search
1个回答
0
投票

使用比较功能。您还可以使用标准库中的 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));
© www.soinside.com 2019 - 2024. All rights reserved.