E. 实验7_17_设计函数

本文详细介绍了二分查找算法在升序数组中的应用,通过一个具体的C语言实现案例,展示了如何在大型数组中高效查找特定元素。文章包含了完整的程序代码,并提供了一个运行示例,帮助读者理解二分查找的工作原理和实际操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述
int BinarySearch(int a[],int n,int key);利用二分查找算法,在升序排列的数组a的前n个元素中查找值为key的数组元素的下标。如果数组a中存在整数key,则返回下标;否则返回-1。假设数组a中的元素互不相同。
输入与输出要求:首先输入两个整数n,m,分别代表数组a中元素的个数与需要查找的整数的个数,n(0<n<=2000000)与m(0<m<=100000)。然后分别输入n个整数和m个整数,分别代表存放在数组中的数以及要查找的数。输出m个整数,分别为要查找的数在数组a中的下标,如果数组a中不存在某个数,则输出-1。数与数之间用空格分开,注意第n个数后没有空格而是换行符。

注意:
1、由于n比较大,建议使用全局变量存储这n个整数;
2、由于数据量较大,建议输入时使用scanf()函数。

程序运行效果:
Sample 1:
15 ↙
20↙
-293 -213 -23 0 1 5 11 23 56 67 87 273 999 2132 10000↙
-23 -99999 0 999 953 67 56 44 33 87 -293 23 11 273 -213 2132 10000 87654 1 5↙
2 -1 3 12 -1 9 8 -1 -1 10 0 7 6 11 1 13 14 -1 4 5

#include <stdio.h>
int binarySearch(int a[],int searchKey,int low,int high)
{
   int middle;
   middle = (low + high)/2;
   while(low <= high && a[middle]!=searchKey){
      if(searchKey < a[middle])
             high = middle - 1;
      else
            low = middle + 1;
      middle = (low + high)/2;
   }
  if (low > high)  return -1;
  else    return middle;
}
int main(void)
{
	int m,n;
	scanf("%d",&m);
	scanf("%d",&n);
	int a[m];
	int b[n];
	for(int i=0;i<m;i++)
	scanf("%d",&a[i]);
	for(int i=0;i<n;i++)
	scanf("%d",&b[i]);
	for(int i=0;i<n;i++)
	{
	int c=binarySearch(a,b[i],0,m-1);
	printf("%d ",c);
	}
	return 0;
}

亲测可过

gat.attention_2.a grad mean: 0.0000000000000000 gat.attention_3.W grad mean: -0.0001388461387251 gat.attention_3.a grad mean: 0.0000000000000000 gat.out_att.W grad mean: -0.0000622164589004 gat.out_att.a grad mean: 0.0000000000000000 output.weight grad mean: 0.0008497163653374 output.bias grad mean: -0.1250000000000000 ----------------grad---------------------- graph_constructor.node_embeddings grad mean: 0.0000000000000000 graph_constructor.edge_net.0.weight grad mean: 0.0000000000000000 graph_constructor.edge_net.0.bias grad mean: 0.0000000000000001 graph_constructor.edge_net.2.weight grad mean: 0.0000000000000000 graph_constructor.edge_net.2.bias grad mean: 0.0000000006000980 gat.attention_0.W grad mean: -0.0000368939508917 gat.attention_0.a grad mean: 0.0000000000000000 gat.attention_1.W grad mean: -0.0000208595829463 gat.attention_1.a grad mean: 0.0000000000000000 gat.attention_2.W grad mean: -0.0000357754943252 gat.attention_2.a grad mean: 0.0000000000000000 gat.attention_3.W grad mean: -0.0000279349351331 gat.attention_3.a grad mean: 0.0000000000000000 gat.out_att.W grad mean: -0.0000130605521917 gat.out_att.a grad mean: 0.0000000000000000 output.weight grad mean: 0.0002162945747841 output.bias grad mean: -0.0312500000000000 ----------------grad---------------------- graph_constructor.node_embeddings grad mean: 0.0000000000000000 graph_constructor.edge_net.0.weight grad mean: 0.0000000000000000 graph_constructor.edge_net.0.bias grad mean: 0.0000000000000003 graph_constructor.edge_net.2.weight grad mean: 0.0000000000000000 graph_constructor.edge_net.2.bias grad mean: 0.0000000009026457 gat.attention_0.W grad mean: -0.0001302765740547 gat.attention_0.a grad mean: 0.0000000000000000 gat.attention_1.W grad mean: -0.0000974033828243 gat.attention_1.a grad mean: 0.0000000000000000 gat.attention_2.W grad mean: -0.0001679359556874 gat.attention_2.a grad mean: 0.0000000000000000 gat.attention_3.W grad mean: -0.0001393686106894 gat.attention_3.a grad mean: 0.0000000000000000 gat.out_att.W grad mean: -0.0000540103574167 gat.out_att.a grad mean: 0.0000000000000000 output.weight grad mean: 0.0003860194992740 output.bias grad mean: -0.0937500000000000 模型的梯度是这样的
最新发布
08-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值