为什么写出正确的二分法很难? 以下是我写出的,估计也有BUG。

来源:互联网 发布:mysql c3p0连接池配置 编辑:程序博客网 时间:2024/04/30 04:07

// 为什么写出正确的二分法很难? 以下是我写出的,估计也有BUG。

int binary_search(const char* key, const char* array[], int ilen)
{
 int start = 0;
 int end = ilen-1;

 while (true) {
  int mid = (end + start)/2;
  int ret = strcmp(array[mid], key);
  if (ret == 0)
   return mid;
  else if (start == end)
   break;
  else if (ret > 0) // value > key
   end = mid;
  else { // value < key
   if (start == mid)
    ++start;
   else
    start = mid;
  }
 }

 return -1;
}

const char* data[] = {"a", "ab", "de", "df", "hhh", "hn", "hz", "ln", "z"};
for (int i = 0; i < 9; i++)
 printf("%d/n", binary_search(data[i], data, 9));

const char* key[] = {"a2", "ab2", "de", "df1", "hxhh", "hn", "1hz", "lnx", "zz"};
for (int i = 0; i < 9; i++)
 printf("%d/n", binary_search(key[i], data, 9)); 

原创粉丝点击