软件工程概论作业三 信1205班 董文轩 刘权毅

今天,王老师又给我们布置了一个结对开发项目的小课题,内容如下:

用一个一维数组随机存储n个数,然后求其子数组最大值。另外,要求时间复杂度为O(n)。其中,子数组表示k(k=1,2,3,······,n)个连续的数组元素所组成的数组。

对于这个问题,我们经过分析,得到了一些基本思路。

①首先,我们先考虑如何存储不同子数组的数据信息。在这里,我们采用链表的存储方式来存储数据。由于链表对应有头指针,因此在遍历链表时方便查找数据;而且,链表是顺序存储的,满足题目要求,方便建立不同的子数组。

②其次,我们要确定每个链表要存储的数据。首先我们要一个num[]数组,它用来存储当前所取的子数组的连续的下标。同时,还需要一个max值,用来存储经过比较后的子数组的最大值;最后还需要一个next指针。

③接下来,就是考虑如何求这个max值,又可以保证时间复杂度为O(n)。首先,我们不能使用循环嵌套,否则,时间复杂度会呈现非线性。在这里,我们考虑构造一个sort函数来筛选出max值,并将其存储到链表中去。这里定义的sort函数结构大致如下:

首先建立一个动态数组,如:int a[]=new int(m);//m表示数组大小

void sort(int m1,int *a,int n,*p)//m1表示数组大小,*a表示当前子数组起点的下标,n表示所取子数组中连续元素的个数,*p相当于链表的头指针

{

       for(n=1;n<=m;n++){}//这里表示取间隔为n(n=1,2,3,······,m)的子数组

\\这里采用头插法来创建链表,同时赋予链表索要记录的数据num[]和max值

}

这时我们所创建的链表大致如下:

这样,便完成了这次程序。以上就是我们的思路和算法,可能中间存在一些缺陷和思路上的漏洞,我们会在以后的编程时加以完善和改进,谢谢!

                                                                                                                                                                                           信1205班

                                                                                                                                                                                             刘权毅

                                                                                                                                                                                             董文轩

 

posted @ 2014-03-17 21:41  dashendwx  阅读(162)  评论(0编辑  收藏  举报