折半查找

来源:互联网 发布:数据调查报告 编辑:程序博客网 时间:2024/06/12 02:02

说明:元素必须是有序的,如果是无序的则要先进行排序操作。
  基本思想:也称为是折半查找,属于有序查找算法。将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n2],则找到x,算法中止;如果x<a[n2],则只要在数组a的右半部搜索x。
  
  复杂度分析:最坏情况下,关键词比较次数为log(n+1),且期望时间复杂度为O(logn);

  注:折半查找的前提条件是需要有序表顺序存储,对于静态查找表,一次排序后不再变化,折半查找能得到不错的效率。但对于需要频繁执行插入或删除操作的数据集来说,维护有序的排序会带来不小的工作量,那就不建议使用。——《大话数据结构》

public class Binary {    public static int Select(int[] arr, int value){        int mid;        int low = 0;        int high = arr.length - 1;        while(low <= high){            mid = (low + high)/2;            if(arr[mid] < value){                low = mid + 1;            }            if(arr[mid] > value){                high = mid - 1;            }            if(arr[mid] == value)  return mid;        }        return -1;    }    public static void main(String[] args) {        int[] arr = {1,2,3,4,5,6,7,8,9};        System.out.println("2的下标为: " + Select(arr, 2));    }}
0 0
原创粉丝点击