C 在不到O(log(n))的运行时间内从排序数组中搜索

C 在不到O(log(n))的运行时间内从排序数组中搜索,c,algorithm,search,binary-search,C,Algorithm,Search,Binary Search,我使用二进制搜索在O(log(n))时间内从已排序的数字数组中搜索一个数字。我的C搜索功能如下: search(int array[],int size,int search) { int first=0; int last=size-1; int middle = (first+last)/2; while( first <= last ) { if ( array[middle] < search ) first = middle

我使用二进制搜索在O(log(n))时间内从已排序的数字数组中搜索一个数字。我的C搜索功能如下:

search(int array[],int size,int search)
 {
 int first=0;
 int last=size-1;
 int middle = (first+last)/2;
   while( first <= last )
   {
      if ( array[middle] < search )
         first = middle + 1;    
      else if ( array[middle] == search ) 
      {
         printf("%d found at location %d.\n", search, middle+1);
         break;
      }
      else
         last = middle - 1;

      middle = (first + last)/2;
   }
   if ( first > last )
      printf("Not found! %d is not present in the list.\n", search);
}
search(int数组[],int大小,int搜索)
{
int first=0;
int last=size-1;
中间整数=(第一个+最后一个)/2;
while(首末)
printf(“未找到!%d不在列表中。\n”,搜索);
}
这里
size
是数组的大小,
search
是要搜索的数字。
是否有任何方法可以比上述程序更简单地执行搜索

是,使用哈希表。在一般情况下应该更快。

(1)
一定有办法
-为什么?(2) 如果您的阵列在RAM中,在32位系统中,
log_2(n)<32
。有那么糟糕吗?(3) 您是在寻找更好的渐近复杂性[
Omega(logn)
]还是具有更好常数的实现?标准C定义了在O(log(n))时间内搜索数组的方法。我相信使用基于比较的搜索不会做得更好。所有基于比较的算法都有一个logn的下限@pmg的证明已经用来支持您的观点。的可能重复。的可能重复。这意味着它不再是排序数组。@UmNyobe:您可以同时存储排序数组和
hashmap:key->index
。如果我遗漏了什么,请纠正我,但我不认为这会使其他排序数组操作也相应地变慢。我认为这不是一个好的解决办法,但它是可能的。@amit是的。OP应该更清楚他需要什么。不过,我不是最悲观的选民