数组学习总结
一、重要知识点汇总
一维数组和二维数组的定义、初始化与使用;三种排序方式和两种查找方式;传递数组。
二、重要知识点的运用
1.数组的下标都是从0开始计数的,不能按照习惯当成从1开始计数。
2.数组元素个数一定为常量,且只能用整型常量定义数组的大小,不能使用变量定义数组的大小。
3.在数组进行初始化时,初始化列表中提供的初值个数不能多于数组元素的个数。对数组中定义但未进行初始化的数组元素的值来说,仍旧为随机数。另外,若是省略了对数组长度的声明,系统会自动按照初始化列表中提供的初值个数对数组进行初始化并确定数组的大小,因此,只给部分数组元素赋值时,不能省略对数组的长度声明。
4.为了减少当某一程序需要修改数据时的困难,我们可以在主函数之前把幻数(在程序中直接使用的常数)定义为宏常量或者是const常量,这大大减少了修改数据的复杂性。
5.数组在内存中占用的字节数的判断:
一维:数组长度sizeof(基类型)
二维:第一维长度第二维长度*sizeof(基类型)
通常来说,计算一个类型或者是变量在内存中所占的字节数的最准确而可靠方法就是使用sizeof运算符。
6.数组第一维的长度声明可以省略,但第二维的长度声明不能省略!
7.三种排序方法主要是:冒泡排序、选择排序、插入排序。两种查找方法为:线性查找(顺序查找)和折半查找(二分查找)。折半查找的效率比线性查找高的多,但他使用的前提是被查找的数据集合是已排列好顺序的。
8.冒泡排序的伪代码如下所示:
for(i=0;i<=n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(score[j]>score[i])
{
temp=score[j];
score[j]=score[i];
score[i]=temp;
}
}
}
或者可以用一个函数sort()来进行排序,好处就是运算速度快,可以避免超时,其基本使用方法为:sort(a,a+n)它排序的数组为从a0到an-1,使用的头文件为algorithm。
9.选择排序的伪代码为:
int i,j,k,temp;
for(i=0;i<=n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(score[j]>score[k])
{
k=j;
}
}
if(k!=i)
{
temp=score[k];
score[k]=score[i];
score[i]=temp;
}
}
10.插入排序的伪代码为:
for(i=1;i<num;i++)
{
l=i-1;temp=a[i];
while(l>=0&&a[l]>temp)
{
a[l+1]=a[l];
l--;
}
a[l+1]=temp;
}
11.数组作函数参数传给函数的是数组的首地址,因此属于传地址调用。
12.对于细小知识点的理解与运用:
a[++]=x;就相当于a[n]=x;n++;
for(int i=0;i<n;i++)就等同于memset(a,0,sizeof(a));(使用memset要在cstring中定义)
13.若想从数组a复制k个元素到数组b:memcpy(b,a,sizeof(int)*k)
若想全部复制到数组b中:memcpy(b,a,sizeof(a))
若数组a和数组b都是浮点型:memcpy(b,a,sizeof(double)*k)(使用memcpy要在cstring中定义)
三、收获与感悟
对于数组这一章的学习,除了要我们熟悉的掌握并能很好的利用数组的同时,也对我们有了更高的要求,就是把前几章学习的知识点在这一章中能够灵活的应用,这更加考验我们的个人能力,能够很好的反映出自己在哪一方面的不足,并通过写代码、修改代码来进一步完善和巩固对于知识点的理解和使用。
个人觉得这需要我们有更强的逻辑思维能力,在对代码有思路的前提下,更加完美的写出代码,并使他成功的编译。本章中提到的排序和查找的方法,需要我们对他有足够的理解和体会,内化为自己的理解,使自己能在之后的代码中对它有足够熟练的运用。