二分查找
来源:互联网 发布:天命西游数据平移 编辑:程序博客网 时间:2024/05/18 02:54
折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。
这是我实现的二分查找的代码
下面是经典的二分查找代码private static int[] array = {3, 6, 34, 99, 110, 440, 500, 220, 500, 755};public int binarysearch(int[] a, int start, int end, int value) {int mid = (end -start)/2 + start;if(value == a[mid]) return mid;if (start >= end) { return -1; }else if(value < a[mid])return binarysearch(a, start, mid, value);else return binarysearch(a, mid+1, end, value);}public static void main(String[] args) {int searchdata = 220;int index= new Main().binarysearch(array, 0, array.length-1, searchdata);System.out.println(searchdata + "的索引是" + index);}
/** * 二分查找又称折半查找,它是一种效率较高的查找方法。 【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。 * @author Administrator * */public class BinarySearch { public static void main(String[] args) {int[] src = new int[] {1, 3, 5, 7, 8, 9, 77, 99, 100}; System.out.println(binarySearch(src, 3));System.out.println(binarySearch(src,100,0,src.length-1));}/** * * 二分查找算法 * * * * @param srcArray * 有序数组 * * @param des * 查找元素 * * @return des的数组下标,没找到返回-1 */ public static int binarySearch(int[] srcArray, int des){ int low = 0; int high = srcArray.length-1; while(low <= high) { int middle = (low + high)/2; if(des == srcArray[middle]) { return middle; }else if(des <srcArray[middle]) { high = middle - 1; }else { low = middle + 1; }}return -1; } /** *二分查找特定整数在整型数组中的位置(递归) *@paramdataset *@paramdata *@parambeginIndex *@paramendIndex *@returnindex */public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){ int midIndex = (beginIndex+endIndex)/2; if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){ return -1; } if(data <dataset[midIndex]){ return binarySearch(dataset,data,beginIndex,midIndex-1); }else if(data>dataset[midIndex]){ return binarySearch(dataset,data,midIndex+1,endIndex); }else { return midIndex; } } }
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 用ASM实现GetProcAddress()函数
- tomcat配置https访问系统
- Thread safety & Re-entrancy
- ubuntu12.04使用eclipse快捷键设置--关于alt+/无法使用,ubuntu删除alt快捷键
- 透视投影理解
- 二分查找
- 100 - The 3n + 1 problem
- JMeter 测试Web登录
- Android Linearlayout 添加分割线
- heap corruption detected: after normal block 可能的原因 ---- 备份自己用
- Asp.Net MVC3 简单入门详解过滤器Filter
- 在做MFC程序时,类视图中的View类突然找不到了
- Qt QTableView实现数字排序
- 如何使用eclipse创建Maven工程及其子模块