二分查找
来源:互联网 发布:音乐播放器源码 编辑:程序博客网 时间:2024/06/14 01:44
二分查找的三种实现方法
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。
因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
java实现代码:
public class Test {public static void main(String[] args) {int[] arr = {1,2,3,4,5};System.out.println(binarySearch1(arr,5));System.out.println(binarySearch2(arr,5));System.out.println(binarySearch3(arr,5,0,arr.length-1));}/** * 二分查找 * @param srcArray 要查找的数组 * @param des 要查找的数字 * @return 元素下标 */public static int binarySearch1(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; } /** * 二分查找 * @param srcArray 要查找的数组 * @param des 要查找的数字 * @return 元素下标 */public static int binarySearch2(int[] srcArray, int des) { int low = 0; int high = srcArray.length - 1; while ((low <= high) && (low <= srcArray.length - 1) && (high <= srcArray.length - 1)){ int middle = low + ((high - low) >> 1); if (des == srcArray[middle]) { return middle; } else if(des < srcArray[middle]) { high = middle - 1; } else { low = middle + 1; } } return -1;}/** * 二分查找递归实现 * @param dataset 数组 * @param data 要查找的数 * @param beginIndex 初始递归为0 * @param endIndex 初始递归为dataset.length-1; * @return 返回下标 */public static int binarySearch3(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 binarySearch3(dataset,data,beginIndex,midIndex-1); }else if(data>dataset[midIndex]){ return binarySearch3(dataset,data,midIndex+1,endIndex); }else { return midIndex; } } }
444
阅读全文
0 0
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- Vision_字符串_AC自动机
- BOS系统的设计与实现
- codeforces 868C Qualification Rounds
- 8. 适配器模式
- Codeforces Round #439 A The Artful Expedient 博弈解释 +暴力写法
- 二分查找
- Hibernate的持久化对象状态
- python里使用正则的finditer()函数
- mysql服务器无法连接10055错误解决示例
- FTPrep, 106 Construct Binary Tree from Inorder and Postorder Traversal
- JAVA提高篇(17)--打印流PrintStream记录日志文件
- Codeforces869C The Intriguing Obsession
- SecureCRT8.0安装与破解
- 彻底理解js的对象继承