折半查找函数

折半查找

二分查找又称折半查找

优点:比较次数少,查找速度快,平均性能好;

缺点:要求待查表为有序表,且插入删除困难。

因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

#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;
}
时间: 2024-10-07 03:36:34

折半查找函数的相关文章

c语言:编写折半查找函数

编写折半查找函数 程序: #include <stdio.h> int binsearch(int x, int arr[], int len)//binsearch 折半,对分 { int left = 0; int right = len - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] < x) { left = mid + 1; } else if (arr[mid]

用c语言实现折半查找函数

#include <stdio.h> #include <stdlib.h> int binsearch(int x, int arr[], int left, int right) { while (left <= right) { int mid = (left+right)/2; if (arr[mid] == x) { return mid; } else if (arr[mid] < x) { left = mid + 1; } else { right = 

C语言:编写折半查找函数,即二分法

#include<stdio.h>#include <stdlib.h>int main(){     int ret=0;     int arr[]={1,2,5,6,88,99,456,666};     ret= binsearch(666,arr,0,sizeof(arr) / sizeof(arr[0])-1);    if(ret!=-1)   {       printf("%d",ret);      }   else   {      pri

编程成长日记——折半查找

编写一个折半查找函数 #include<stdio.h> //编写折半查找函数 int binsearch(int a,int num[],int b ) { int left=0,right=b-1,mid=0; while(left<=right) {    int mid=(left+right)/2;  if (num[mid]<a) { left=left+1; } else if (num[mid]==a) { return mid; } else { right=mi

C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。

作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1)    输入10个无序的整数.(2)    用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3)    要求任意输入一个整数,用折半查找法从排好序的10个数中找出该数,若存在,在主函数中输出其所处的位置,否则,提示未找到.提示:可定义input函数完成10个整数的输入,sort函数完成输入数的排序,search函数完成输入数的査找功能. 下面是具体代码:(本人懒,没写注释,不过仔细看代码,还是很简单的) 1 #inclu

折半查找法的两种实现

折半查找法: 在有序表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现: 1)     待查找数据值与中间元素值正好相等,则放回中间元素值的索引. 2)     待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,执行1),直到找到相等的值. 3)     待查找数据值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围,执行1),直到找到相等的值 4)     如果最后找不到相等的值,则返回错误提示信息. 按照二叉树来理解:中间值为二叉树的根,前半部

通过折半查找,查找某一数组中是否存在某个数

实现折半查找int binsearch(int x,int v[],int n),该函数用于判断已排序的数组v中是否存在某个特定的值x,数组v的元素必须以升序排序.如果v中包含x,则函数返回x在v中的位置(介于0~n-1之间的一个整数):否则函数返回-1. #include <stdio.h> int binsearch(int x, int v[],int n) { int left = 0;//数组最左边的位置 int right = n-1;//数组最右边的位置 int mid = 0;

(java)有序表查找——折半查找,插值查找,斐波那契查找

有序表查找 /* 主函数 */ public class OrderTableSearch { public static void main(String[] args) { int [] a= {0,1,16,24,35,47,59,62,73,88,99}; System.out.println(FibonacciSearch(a, 10, 88)); System.out.println(InsertKeySearch(a, 10, 88)); System.out.println(Bi

查找函数和跳转函数

1. 查找函数bsearch() 查找字符在已排列好的字符中的位置,返回第一个匹配的指针,否则NULL #include<stdio.h> #include<stdlib.h> void *bsearch(const void *key,const void *buf,size_t num,size_t size,int (*compare)(const void *,const void *)); key是指向关键字的指针,buf是已排列好的字符串(从低到高)num是数组元素数目