您的位置:首页 > 编程语言 > C语言/C++

折半查找函数

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

int search(int arr[], int len, int key)
{
int left = 0;
int right = len - 1;
int mid = (left + right) / 2;
if (key <= right&&key >= left)//输入值在查找范围内开始查找
{
while (left <= right)
{
if (arr[mid] > key)
{
right = mid - 1;
mid = (left + right) / 2;
}
else if (arr[mid] < key)
{
left = mid + 1;
mid = (left + right) / 2;
}
else
{
printf("查找成功:arr[%d]", mid);
return mid;

}
}
}
if (key > right || key < left)
{
printf("查找失败");
}
}
int main()
{
int i;
int arr[10];
int len = sizeof(arr) / sizeof(arr[0]);
int key = 0;
int mid = 0;
for (i = 0; i < len; i++)
{
arr[i] = i;
}
printf("请输入要查找的数\n");
scanf("%d", &key);
search(arr, len, key);//调用查找函数

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言