写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)

//2.写代码可以在整型有序数组中查找想要的数字,
//找到了返回下标,找不到返回-1.(折半查找)

#include <stdio.h>
#define N 9
int main()
{
	//初始化下标值,如果没有新的下标则说明没找到
	int sign=0;
	//声明并初始化要找的数值
	int n=0;
	//声明一个有序数组
	int arr[N]={1,2,3,4,5,6,7,8,9};
	//初始化对半查找所需要的变量
	int left=0;
	int right=8;
	int mid=(left+right)/2;
	//输入要找的值
	printf("请输入一个数\n");
	scanf("%d",&n);
	//开始二分查找
	while(left<=right)
	{
		//二分查找也叫折半查找
		mid=(left+right)/2;
		if(n==arr[mid])
		{
			sign=mid;
			break;
		}
		else if(n>arr[mid])
		{
			left=mid+1;
			//如果此处写成left=mid;和下面也写成right=mid;
			//则可能会造成死循环
			//找不到所需要的值
		}
		else if(n<arr[mid])
		{
			right=mid-1;
		}
	}
	if(sign)
		printf("找到了,下标是%d\n",sign);
	else
		printf("没找到,%d\n",sign);
	return 0;
}
第一章概论 自测题答案 一、填空题 1. 数据结构是一门研究非数值计算的程序设计问题计算机的 操作对象 以及它们之间的 关系 和运算等的学科。 2. 数据结构被形式地定义为(D, R),其D是 数据元素 的有限集合,R是D上的 关系 有限集合。 3. 数据结构包括数据的 逻辑结构 、数据的 存储结构 和数据的 运算 这三个方面的内容。 4. 数据结构按逻辑结构可分为两大类,它们分别是 线性结构 和 非线性结构 。 ....... 第2章 自测卷答案 一、填空 1. 【严题集2.2①】在顺序表插入或删除一个元素,需要平均移动 表一半元素,具体移动的元素个数与 表长和该元素在表的位置 有关。 2. 线性表结点的集合是 有限 的,结点间的关系是 一对一 的。 3. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动 n-i+1 个元素。 4. 向一个长度为n的向量删除第i个元素(1≤i≤n)时,需向前移动 n-i 个元素。 5. 在顺序表访问任意一结点的时间复杂度均为 O(1) ,因此,顺序表也称为 随机存取 的数据结构。 ....... 第8章 查找 自测卷 姓名 班级 一、填空题(每空1分,共10分) 1. 在数据的存放无规律而言的线性表进行检索的最佳方法是 顺序查找(线性查找) 2. 线性有序表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检索表与k相等的元素,在查找不成功的情况下,最多需要检索 8 次。设有100个结点,用二分法查找时,最大比较次数是 7 。 3. 假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ;平均查找长度为 3.7 。解: 显然,平均查找长度= O(log 2 n) <5次(2 5 )。但具体是多少次,则不应当按照公式来计算( 即( 21×log 2 21)/20=4.6次并不正确! )。因为这是在假设 n=2 m -1的情况下推导出来的公式。应当用穷举法罗列全部元素的查找次数为=( 1+2×2+4×3+8×4+5×5)=74; ASL=74/20=3.7 !!! 4. 折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找元素20,它将依次与表元素 28. 6. 12 .20 比较大小。 .........
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值