C语言中的二分查找(折半查找)(vs2013)

   日期:2020-10-20     浏览:114    评论:0    
核心提示:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。如果要查找的元素在表中,那么返回它的位置,如果元素不在表中,返回NULL。为什么说二分查找是一种效率较高的查找方法呢?举个例子,比如我们有3,6,9,11,12,15,19,20,22这九个数字。我随便选择其中的一个数字,假设是11,我们要从这九个数字中找到11。如果找到的数字是11,那就找到了,如果这九个数中没有11,那就找不到。假设从第一个开

二分查找

  二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。如果要查找的元素在表中,那么返回它,如果元素不在表中,返回NULL。

顺序查找与二分查找的比较

为什么说二分查找是一种效率较高的查找方法呢?

首先我们来看看顺序查找,举个例子,
比如我们有:
      3,6,9,11,12,15,19,20,22,
这九个数字。
   我随便选择其中的一个数字,假设是11,我们要从这九个数字中找到11。如果找到的数字是11,那就找到了,如果这九个数中没有11,那就找不到。
   假设从第一个开始找,
第一次:3,不对
第二次:6,不对
第三次:9,不对
第四次:11,找到了!
   这就是顺序查找,每次寻找只能排除一个数字,现在我们要找的是11,只要四次,可是如果我们要找的是25,就要九次了,如果数字的个数更多那就要花费更多次数。

那么效率较高的二分查找是怎样的呢?
  假设我们要找的数字仍然是11,
第一次:我们取这九个数字的中间的数字:12。11<12,小了,那么我们就能排除12右边的部分。
第二次:我们取12左边部分的中间的数字:9。11>9,大了,那么我们就能排除9左边的部分。
第三次:我们取9右边部分的中间数字:11。11=11,找到了。
   这样的方式要比上面的顺序查找快得多,可能在这个例子中只有一次的差别,可当数字多了呢?那二分查找的速度就要快的多了,这就是二分查找。

使用

下面来看看二分查找在c语言中的运用,这里我使用的是VS2013。

#include <stdio.h>
int main()
{ 
	char arr[] = {  1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	//tofind表示要找的数字
	int tofind = 7;
	//数组最左边元素的下标
	int left = 0;
	//数组最右边元素的下标
	int right = sizeof(arr) / sizeof(arr[0]) - 1;
	//sizeof(arr)是计算arr的字节
	//sizeof(arr[0])是计算数组中第一个的字节
	//两者相除就是数组长度
	while (left <= right){ 
		int mid = (left + right) / 2;
		if (tofind > arr[mid]){ 
		//说明你要查找的数在mid 的右边,
		//因此需要向右递归查找
			left = mid + 1;
		}
		else if (tofind < arr[mid]){ 
			right = mid - 1;
		}
		else{ 
			printf("找到了,下标是:%d\n", mid);
			break;
		}
	}
	if (left>right){ 
		printf("找不到");
	}
	system("pause");
	return 0;
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服