程序A—数组


一、数组中的名词及知识点

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值