二分查找法
来源:互联网 发布:微信里数据指的是什么 编辑:程序博客网 时间:2024/06/16 04:13
方法一:非递归的方法
#include<stdio.h>#include<stdlib.h>int binary_s(int a[], int len, int k){ int low = 0; int high = len - 1; while (low <= high) { int mid = (low + high) / 2; if (k == a[mid]) return mid; else if (k>a[mid]) low = mid + 1; else high = mid - 1; } return -1;}int main(){ int a[10] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; int len = sizeof(a) / sizeof(int); int index; index = binary_s(a, len, 6); printf("index=%d", index); system("pause"); return 0;}
方法二:递归的方法
#include<stdio.h>#include<stdlib.h>int binary_s(int a[], int value, int low, int high){ if (low > high) return -1; int mid = (low + high) / 2; if (value == a[mid]) return mid; else if (value > a[mid]) return binary_s(a, value, mid + 1, high); else return binary_s(a, value, low, mid - 1);}int binary_search(int a[], int len, int value){ if (a == NULL || len <= 0) return -1; int low = 0; int high = len - 1; int index; index=binary_s(a, value, low, high); return index;}int main(){ int a[10] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; int len = sizeof(a) / sizeof(int); int index; index = binary_search(a, len, 11); printf("index=%d", index); system("pause"); return 0;}
时间复杂度:O(logn),最坏的情况下为O(n)
参考:
http://www.cnblogs.com/shuaiwhu/archive/2011/04/15/2065062.html
http://www.cnblogs.com/xwdreamer/archive/2012/05/07/2487246.html
http://blog.csdn.net/frances_han/article/details/6458067
0 0
- 查找----二分查找法
- 二分查找法,查找string
- 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- java 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- java:二分查找法
- C++ 二分查找法
- 二分查找法
- 【二分查找法】
- php二分查找法
- 二分查找法
- 二分查找法
- 详解内部类
- jsp页面通过iframe嵌套html页面不可编辑
- Cloudera CDH新增节点到集群参考步骤
- 在JAVA中使用sqljdbc连接MS SQL SERVER
- Android style的复用
- 二分查找法
- iOS - 获取label内容的各行内容
- 【第三周 项目3-求集合并集】
- Android 布局 LinearLayout与RelativeLayout的布局属性
- 判断字符串子串数
- 05:进制转换 十六进制-十进制
- PL/SQL存储过程示例及图解
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- eclipse报错 at org.springframework.asm.ClassReader.<init>(Unknown Source)