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分钟,因为涉及了众多知识点,代码也都是现场打的所以可能比较久,我也会尽快提高速度,争取之后的博客耗时短且高质量,谢谢大家观看!