二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。
但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
比较次数:
编辑
计算公式:
当顺序表有n个关键字时:
查找失败时,至少比较a次关键字;查找成功时,最多比较关键字次数是b。
注意:a,b,n均为正整数。
过程:
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是:(这里假设数组元素呈升序排列)将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止;如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x;如果x>a[n/2],则我们只要在数组a的右 半部继续搜索x。
代码:
#include<stdio.h>
void t_search(int data[],int n,int key)
{
int left = 0;
int right = n-1;
int mid;
while(left <= right)
{
mid = (left+right)/2;
if(data[mid]==key)
break;
else if(data[mid] > key)
{
right = mid-1;
}
else
{
left = mid+1;
}
}
if(left<=right)
printf("found: %d is in data[%d]\n",data[mid],mid);
else
printf("no this data\n");
}
int main()
{
int data[10] = {12,34,56,78,88,89,90,112,220,330};
t_search(data,sizeof(data)/sizeof(data[0]),34);
return 0;
}