二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
代码运行展示
/*
二分查找又叫折半查找
要求线性表必须采用顺序存储结构,
而且表中元素按关键字有序排列
*/
#include <stdio.h>
#define N 10
int Half_Find(int *a, int n, int x);
int main(int argc, char** argv)
{
int x;
int b;
//二分查找要求元素已是有序怕排列
int a[N] = {4, 12, 23, 34, 48, 53, 64, 77, 86, 90};
printf("请输入想要查找的元素: ");
scanf("%d", &x);
b = Half_Find(a,N,x);
if(b==(-1))
{
printf("未找到该元素!\n");
}
else
{
printf("该元素在数组中下标为:%d\n", b);
}
return 0;
}
函数:
/*
Half_Find:二分查找(折半查找)
@a:数组名
@n:数组元素个数
@x:需查找的元素
返回值类型:int 可以找到返回 下标 找不到返回 -1
*/
int Half_Find(int *a, int n, int x)
{
int i = 0;
int low = 0, high = n-1;
int mid = (low+high)/2;
printf("依次比较元素为:");
while(low<=high)
{
i++;
printf("%d ",a[mid]);
if(a[mid]>x)
{
high = mid-1;
}
else if(a[mid]<x)
{
low = mid+1;
}
else
{
printf("比较次数:%d\n", i);
return mid;
}
mid = (low+high)/2;
}
return -1;
}