在已排好序的n个元素a[0:n-1]中,找出特定元素x在数组中的位置
Dev-C++ 5.11
将n个元素分成两半,取a[n/2]与x比较,
若x==a[n/2],则返回n/2。
若x < a[n/2],则在a[]的左半部份继续搜索。
若x > a[n/2],则在a[]的右半部份继续搜索。
Algorithms binarySearch(input[],x,length)
left=0,right=length-1;
while(left<=right)
middle = (left+right)/2
if x==input[middle] return middle
else if x>input[middle] left = middle+1
else right = middle-1
int binarySearch(int input[],int x,int length){ int left=0,right=length-1; int middle; while(left<=right){ //确保有一个元素落在搜索范围 middle=(left+right)/2; if(x == input[middle]){ return middle; //返回该数字在数组中的序列号 } else{ if(x > input[middle]){ left = middle+1; //x比input[left...middle]中的元素都要大 } else{ right = middle-1; //x比input[middle...right] 中的元素都要小 } } } return -1; //数组中不存在该值 }
每执行一次while()循环,待搜索的数组大小减小一半,最坏情况下,while循环被执行了logn次,所以算法在最坏情况下时间复杂性为O(logn)
原文:http://www.cnblogs.com/sillypasserby/p/5084133.html