R6-3 二分查找 分数 17 作者 陈越 单位 浙江大学 本题要求实现二分查找算法。 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */ }; L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较,并且题目保证传入的数据是递增有序的。函数BinarySearch要查找X在Data中的位置,即数组下标(注意:元素从下标1开始存储)。找到则返回下标,否则返回一个特殊的失败标记NotFound。 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 #define NotFound 0 typedef int ElementType; typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */ }; List ReadInput(); /* 裁判实现,细节不表。元素从下标1开始存储 */ Position BinarySearch( List L, ElementType X ); int main() { List L; ElementType X; Position P; L = ReadInput(); scanf("%d", &X); P = BinarySearch( L, X ); printf("%d\n", P); return 0; } /* 你的代码将被嵌在这里 */ 输入样例1: 5 12 31 55 89 101 31 输出样例1: 2 输入样例2: 3 26 78 233 31 输出样例2: 0
时间: 2024-01-25 21:01:51 浏览: 31
下面是二分查找的实现代码:
```
Position BinarySearch(List L, ElementType X)
{
Position left = 1; // 左边界
Position right = L->Last; // 右边界
while (left <= right) {
Position mid = (left + right) / 2; // 中间位置
if (L->Data[mid] == X) { // 找到了
return mid;
} else if (L->Data[mid] > X) { // 往左边找
right = mid - 1;
} else { // 往右边找
left = mid + 1;
}
}
// 没找到
return NotFound;
}
```
具体思路是:首先设置左边界为1,右边界为L的最后一个元素的位置;然后在每一次循环中,取左右边界的平均值作为中间位置mid,并将L->Data[mid]和X进行比较,如果相等,则找到了,返回mid;如果L->Data[mid]比X大,则说明要在mid的左边继续查找,此时将右边界right更新为mid-1;否则说明要在mid的右边继续查找,此时将左边界left更新为mid+1。如果最终没有找到,返回NotFound。
相关问题
二分查找c语言浙江大学陈越
二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它的算法思想是将目标值与数组的中间元素进行比较,如果目标值小于中间元素,则在数组的左半部分继续查找;如果目标值大于中间元素,则在数组的右半部分继续查找;如果目标值等于中间元素,则返回该元素的下标。
以下是C语言实现二分查找的代码,以浙江大学陈越老师的教材为例:
```c
int BinarySearch( const List L, ElementType X )
{
int left = 0, right = L->Last;
int mid;
while( left <= right )
{
mid = ( left + right ) / 2;
if( L->Data[mid] == X )
return mid;
else if( L->Data[mid] > X )
right = mid - 1;
else
left = mid + 1;
}
return NotFound;
}
```
其中,List是一个结构体类型,包含一个数组Data和一个整数Last,表示数组的最后一个元素下标。NotFound是一个常量,表示未找到目标元素。
l3-001 凑零钱 分数 7 作者 陈越 单位 浙江大学 韩梅梅喜欢满宇宙到处逛街。现在
她正在一家小商店购物,看到自己喜欢的东西想要买下来,可是突然发现自己的钱包里只剩下一些零钱了。她焦急地想着怎么才能凑够零钱支付这笔购物。突然,她想起了数学课上老师讲过的凑零钱方法,她开始仔细地数着自己的零钱,试图凑出足够的金额。
韩梅梅发现自己手里有一些1元、2元、5元和10元的硬币,她开始尝试将它们组合起来,看看能不能凑出购物所需的金额。她从小到大尝试了各种组合,终于成功地凑出了足够的零钱支付了购物的费用。她感到非常得意,因为她不仅成功地解决了凑零钱的难题,还在其中发现了数学的乐趣。
这次的经历让韩梅梅对数学有了更深的理解和兴趣,她决定以后要多加练习,提高自己的凑零钱能力。她还发现了数学在日常生活中的实用性,这让她更加喜欢数学。回到学校后,她向同学分享了自己的凑零钱经历,大家纷纷表示受益匪浅,纷纷表示要学习韩梅梅的方法,提高自己的数学能力。陈越老师听说了这件事,对韩梅梅表示了赞赏,并鼓励她继续保持对数学的热爱,勇敢地面对数学上的挑战。