数组、排序和查找

一、数组:一组具有相同类型的变量的集合。    按顺序排列的一组同种类型的数据构成的集合。

1.一般形式:  数据类型   数组名   [整数]            中括号内的整数表示数组中元素的个数

               如:       int                a        [5]

2.下标的个数表明数组的维数。

3.数组分为一维数组、二维数组……多维数组。

4.一个数组在内存中占一片连续的存储单元。

5.数组大小必须是值为正的常量,不能为变量;一旦定义,不能改变大小。

6.数组大小最好用宏来定义,以适应未来可能的变化。

     如:   #define   SIZE  5

                 int  a[SIZE];

7.数组定义后的初值仍然是随机数。

8.一般需要我们来初始化。

9.   a[j]!=a[j]   是取反操作。

10.下标越界是大忌!!      如a[5]    是0、1、2、3、4     不能有5,数组从0算起。

11.注意:a.数组做函数形参时,数组的长度可以不出现在数组名后面的方括号内,通常用另一个整型形参来指定数组的长度。

                 b.一维数组在内存中占用的字节数为:数组长度×sizeof(基类型)

                     二维数组占用的字节数为:第一维长度×第二维长度×sizeof(基类型)

                c.在不同编译系统中,int型所占的字节数是不同的。

                d.数组第二维的长度声明永远都不能省略。

12.函数    #include……memset(a,0,sizeof(a))            作用是把数组清零,一般用于整体赋值为-1或0。

13.为了不出错,在函数以外定义为全局变量。把数组做成全局数比较好,数组要定义成全局数组,不要在函数内定义。

14.字符串用字符数组存。

15.bool类型占内存最小,因为它只有两个值,ture   or   false    即   1or   0。

二、排序和查找

1.排序:是把一系列无序的数据按照特定的顺序(如升序或降序)重新排列为有序序列的过程。

介绍两类:插入数据和插入排序

   a.插入数据      如:l=num-1;

                                    while(l>=0&&a[l]<x)

                                    {  a[l+1]=a[l];

                                        l--;     }

                                     a[l+1]=x;

  b.插入排序      如:void  ins  sort(int*a,int  num)

                                   {  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;}}

2.查找:是在数组中搜索一个特定元素的处理过程。

   有线性查找和折半查找,主要介绍折半查找。

    折半查找法的基本思想为:首先选取位于数组中间的元素,将其与查找键进行比较。如果它们的值相等,则查找键被找到,返回数组中间元素的下标。否则,将查找的区间缩小为原来区间的一半,即在一半的数组元素中查找。

    折半查找最多比较log2n次。

补充一个sort函数:

   #include<algorithm>

   using  namespace  std;

  默认的sort函数是按升序排列的。

  sort(a,a+n);//两个参数分别为待排序数组的首地址和尾地址。

三、可以解决的问题

判断一组数据是否符合要求、大量数据的处理、有规律的配对等。

四、感想

数组的出现使许多问题的解决更加优化,但掌握运用起来却并不容易。只看课本貌似不难,但一做OJ就能发现难度瞬间上来了。这次的数组练习比上次的练习更难,甚至光看题干都看不懂,反复琢磨,终于完成后,才发现代码没有想象的那么长,可见c的奥妙!

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值