数组vs函数,二分查找vs链式访问??

1>>前言

        感谢大家对之前文章的喜欢,我在这里表示感谢!今天我主要学习了数组和函数的内容,我会分享一点进阶知识,希望能得到大家喜欢谢谢

2>>二分查找比顺序查找好吗?

        我的回答是根据实际情况判断,如果在一个有序数组里,数字越多,二分查找越有优势,查找的速度也越快。先讲解下二分查找。这边给出一个题目:在1到10里尝试用二分查找寻找我们所输入的数字。这边看到题目我们需要有对应思路,才能敲出代码,二分查找每次都是需要中位数下标来做标记点,所以我们选择数组起始位下标和数组末位下标,来找出中位数下标。

找出中位数下标后,我们需要比较这个中位数我们要找的数大小若小则把中位数下标+1(新的起始位下标)去跟末位数重新求一个中位数,若大则把起始位下标和中位数下标-1(新的末位数下标)循环直到找出我们要找的数,这就是最基础的二分查找。

#include<stdio.h>
//二分查找

int main()
{
	int arr[]={1,2,3,4,5,6,7,8,9,10};
	int left = 0;
	int right = sizeof(arr)/sizeof(arr[0])-1;
	int k=0;
	scanf("%d",&k);
	while (left<=right)
	{
		static int n=0;
		n++;
		int middle = left+(right-left)/2;
		if (arr[middle]>k)
			{
				right=middle-1;
			}
		else if (arr[middle]<k)
			{
				left=middle+1;
			}
		else
			{
				printf("找到了,运行了%d次,数字是%d",n,k);
				break;
			}
	} 
	if (left>right)
		printf("找不到目标数字"); 

	return 0;	
 } 

这里把运行次数标记了出来,大家能更好的看到二分查找的优势。假设我们需要找的数字是7,那么二分查找的查找次数就是4次,而顺序查找的次数要7次。当然如果找的数字是1,那肯定是顺序查找快。但假设给定一个数组,数值是1到4,294,967,296(2^32)之间,查找数字n,那么顺序查找的运行次数最多就是2^32,而二分查找最多32次这就是二分查找的最大优势。

3>>二维数组下标

        二维数组可以说是多个一维数组的集合

这边设置一个3行5列的二维数组a,我们只给第一个元素赋值0,其他没赋值的默认为0。一维数组的下标从0开始,二维也是一样,从左到右依次递增,从上到下依次递增。

这里能看到我们数组的下标,i代表行,j代表列,每一行都可以理解为一个单独的一维数组,a[i]可以看作数组名第一行就是a[0]数组元素为1-5,以此类推,二维数组的下标也就理解啦。

4>>数组作为函数参数使用,也就是如何进行数组传参?

#include<stdio.h>

void get(int arr[])
{
	int i=0;
	for (i=0;i<10;i++)
	{
		scanf("%d",&arr[i]);
	}
}
void put(int arr[])
{
	int i=0;
	for (i=0;i<10;i++)
	{
		printf("%d ",arr[i]);
	}
}
int main() 
{
	int arr[10];
	get(arr);
	put(arr);
	return 0;
}

 这是运行结果,可以看到我们输入十个数用数组进行传参,不需要传送数组的具体信息,只需要把数组名字和类型给到我们的对应函数就可以了

5>>链式访问

        什么是链式访问?就是函数这里本来要放一个参数,结果又放了一个函数,这样套娃就叫链式访问。首先来看

 这结果前两个43都能知道,printf返回值是成功打印的个数,我们打印了4和3两个数,所以第三个printf返回的是2,然后又打印了这个2,所以第二个printf发返回的是1,然后打印了1,这也是printf的一个隐藏用法,也是链式访问。

6>>总结

        今天学习的函数和数组让我受益匪浅,分享给大家一起学习学习,评论区可以多多指正不足之处非常感谢。这篇耗时一小时40分钟,因为涉及了众多知识点,代码也都是现场打的所以可能比较久,我也会尽快提高速度,争取之后的博客耗时短且高质量,谢谢大家观看!

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值