在无序集合的递归二分查找
2015-11-06 12:04
274 查看
使用递归实现对一个无序集合元素的二分查找,假设已经有一个排序函数,供你直接使用,所以你不需要自己实现一个排序函数,保证代码可读性、易于维护、有一定的健壮性。
#define Len(a) ( (sizeof(a)) / (sizeof(a[0])) ) bool g_iUsort = true; //标志位,未排序 int comp(const void* a, const void* b) { return *(int*)a - *(int*)b; } bool getBisearch(int a[], int length, int value_find) { if (a==NULL || length<=0) return false; if (g_iUsort) //进行一次排序 { qsort(a, length, sizeof(int), comp); //调用库函数中的快速排序 g_iUsort = false; } int start = 0, end = length-1; int mid = (start+end)/2; if (start<=end) { if (a[mid]>value_find) getBisearch(a, mid, value_find); else if (a[mid]<value_find) getBisearch(&a[mid+1], end-mid, value_find); else return true; } else { return false; } } void main() { int a[] = {3,0,1,6,8}; //无序数组 bool hasValue = false; hasValue = getBisearch(a, Len(a), 3); if (hasValue) puts("存在!"); else puts("不存在!"); }
相关文章推荐
- Linux中通过locale来设置字符集
- Ajax+Spring MVC实现跨域请求(JSONP)
- 简历的重点是抓人
- .net下WinDbg使用说明
- Google宣布支持Vulkan作为Android的底层图形API
- 【百度地图】百度地图混淆后导航飞掉
- DroidDraw UI设计软件开发Android GUI应用程序
- 设计模式大赛 -- 大话设计模式
- 夺命雷公狗ThinkPHP项目之----商城5快速入门
- Gallery自动循环滚动以及手动滚动的平滑切换
- NSDateFormatter NSString转NSDate 出现 8小时偏差解决方法
- 函数waitpid和WTERMSIG说明
- 功成身退:AMD Mantle不再优化了
- AndroidSwipeLayout的使用(listview,gridview,view中滑动显示隐藏按钮的使用)
- 访问者模式 -- 大话设计模式
- firefox访问失败的时间设置错误问题
- C语言文件与目录(四)缓冲区
- protoc-gen-lua 编译、安装、使用教程
- 解释器模式 -- 大话设计模式
- jQuery插件实现静态HTML验证码校验