第三天记录
本来今天是想学一下堆排序,虽然明白了算法的大概流程,可是代码自己写不出来,如果哪天我回来看看,记得把堆排序给补上。
所以今天记录一下以前学的的一个算法,计算最大子序列的算法;
也算是复习一下;
先来说一下什么是最大子序列;
打个比方
如果有一个序列是1,-5, 6 , 2, 3;
那么它的最大子序列之和为6+2+3=11;
可以看出规律的吧;
就是连续的子集!加起来!最大!
多么简单的定义…
但是吧,实现起来的话,有很多方法,我看书的时候给了好像有三四个呢!
其中有个递归的算法着实看了好久没看懂就放弃了;
那这里呢,就不管什么递归还是嵌套循环
介绍一个简单的算法,加起来没有几行
来
看代码
int sum(const int a[],int N){
int Thisnum,Maxnum,j;
Thisnum=Maxnum=0;
for(j=0;j<N;j++){
Thisnum+=a[j];
if(Thisnum>Maxnum){
Maxnum=Thisnum;
}
else if(Thisnum<0){
Thisnum=0;
}
}
return Maxnum;
}
emmmmmm
你说就这么两行,就这样吧,代码意思清晰明了,变量也不多;
就这样吧
恩
今天就这样结束
呜呜呜呜
附加一下测试结果
呜呜呜
没弄出来堆排序
真悲伤
今天不点赞了,哎,end!