二分查找(BinarySearch)

来源:互联网 发布:点o是什么文件 linux 编辑:程序博客网 时间:2024/06/14 10:01

1、二分查找

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

2、算法的要求

(1)必须采用顺序存储结构;(2)必须按关键字大小有序排列

3、时间复杂度

该算法的时间复杂度就是for、while等包含起来的基本运算单元的循环次数,即O(logn)

4、Java代码

public class BinarySearch {     public static void main(String[] args) {          int[] arr = new int[] {1, 3, 5, 7, 8, 9};         System.out.print("目标元素的索引为:");         System.out.println(binarySearch(arr, 5));       }       public static int binarySearch(int arr[],int goal){          int high = arr.length-1;          int low = 0;         while (low <= high) {              int middle=(low+high)/2;  //从数组中间进行折半查找            if (arr[middle] == goal) {                  return middle;              } else if (arr[middle] > goal) {                  high = middle-1;              } else {                  low = middle+1;              }          }          return -1;  //如果待查元素不存在,则返回-1           }  }  
2 0