一、数组中的名词及知识点
1、主要名词
数组名 即表示该数组的名称
数组元素(Element) 即构成该数组的每个数据项
数组下标(Subscript) 即表示数组内元素位置、顺序的编号
数组的基类型(Base Type) 即数组的类型,也即数组内所有元素的类型
数组维数(Dimension) 即为数组下标的个数
排序(Sorting) 对无序数据按特定顺序排列,sort(a,a+n)默认为从小到大
查找(Searching) 有**线性查找(Linear Search)**和折半查找(Binary Search) 等
平均值(Mean) 中位数(Median) 众数(Mode)
冒泡排序(Bubble) 即沉降排序(Sinking Sort)
查找键(Search Key)
2.数组的定义和初始化
一维数组
int a[SIZE];
//(Base Type) (Name)[(Size)];
更常用的形式为 用宏常量定义数组长度,在主函数前定义数组 即
#define P 101
int a[P];
int main()
{
......
}
注意:在定义数组长度所用的常量时注意要比所用长度大一点以防止溢出
对于其初始化则可以采用如下方法:
int a[P]={};
int b[P]={1,2,…,N];
int c[P]={0};
注意:定义数组时不能使用变量定义数组大小,且数组初始化时及输入数值时不可使用数组直接输入,因为数组的数组名同时为数组的地址;
二维数组
同一维数组相似,在一维数组的基础上再加一个下标,具体如下:
int a[SIZE1][SIZE2];
其他注意事项同一维数组,另外,三维及以上数组类似;
注意:二维数组的下标是形如下式
int a[2][3];
//而不是如下形式
int a[2,3];
//一定注意!!!
输入及调用数组
此过程多采用循环结构来实现,如:
//假设已定义数组
for(int i=0;i<n;i++)
cin>>a[i]; //input;
for(int j=0;j<n;j++)
if(a[j]==1)
b++; //using it.
3、排序
排序时使用函数可减少运算量,也可以简化代码
用sort(a,a+n,compare)来实现排序,若不加第三位元素则默认为从小到大排序
其头文件为<algorithm>,其中,compare为排序规则;
比较常用的排序算法有:交换法、选择法、插入排序、冒泡排序、等
查找
Binary Search 此方法对减少循环次数比较有效,可提高程序的运算速度及程序的可读性,其主要思想为:首先选取位于数组中间的元素,将其与查找键进行比较。如果它们的值相等,则查找键被找到,返回数组中间元素的下标。否则,将查找的区间缩小为原来区间的一半,即在一半的数组元素内查找。折半查找的使用方法如下:
//按折半查找法查找值为x的数组元素,若找到则返回x在数组中的下标位置,否则返回-1
int BinSearch(long num[ ],long x , int n) //defination of the BinSearch() foundation
{
int low=0,high=n-1,mid;
while(low<=high) //若左端点小于右端点,则继续查找
{
mid=(high+low)/2;
if(x>num[mid])
low=mid+1; //若x>num[mid],则修改区间左端点
else if(x<num[mid])
high=mid-1;
else
return -1;
}
4、总结
数组适用于对一组数及多组数的处理,可利用数组对元素的存储、定位的特性对数组中元素进行处理、使用,亦适用于矩阵的处理;
二维数组可理解为数组的数组,若是将一维数组具象为数轴,则二维数组、三维数组分别可以具象为平面坐标、空间坐标;但,此种方法使用范围并不广泛,当维次更高时则难以描述,故,可使用数组的数组的理解方式来理解、使用数组,也可以理解为一串编码,一个编码对应一个元素;
对于排序可以使一组数据变得有序,利于后续对数据的处理与调用;
查找则可以定位元素,可用于调用某个或某些元素,并且,折半查找可以减少程序的运算次数,利于程序的运行;
另外,排序、查找等一般是利用函数,通过调用函数来实现的.
2018.12.22 Ki.