通用二分查找

来源:互联网 发布:梦幻西游手游辅助mac 编辑:程序博客网 时间:2024/04/30 05:07

    这是极其简单的一个算法,正是因为其简单,我经常被其搞死。不管是在比赛时还是在面试时,我都在这上面栽过跟头。因为其简单,所以总也不愿花过多时间来写它,总想一气呵成,但总也呵不成,于是脑袋越来越混乱,情绪越来越激动,于是悲剧随之而来。

    二分查找要求被查找数组是排好序的数组,其时间复杂度为O(log(n)),也就是说1亿的数据量大概运行26次就能求出结果。

#include <stdio.h>#include <stdlib.h>int b_search(void* arr, int n, int(*cmp)(void*, void*), void* key, int size){  int left = 0, right = n - 1, mid = 0;  while (left <= right)  {    mid = (left + right) / 2;    if (cmp(key, (char*)arr + mid * size) == 0)      return mid;    else if (cmp(key, (char*)arr + mid * size) < 0)      right = mid - 1;    else      left = mid + 1;  }  return -1;}


原创粉丝点击