原帖由 "mik" 发表:
int empty_array(char *array, int size)
{
while (size--) {
if (*array++)
return 0;
else
continue;
..........
原帖由 "mingjwan" 发表:
只是看起来变快了。你的过程又没有比别人少了什么操作。
原帖由 "mingjwan" 发表:
优化后那段代码只执行一次的。没有什么差别。
三楼的想法,改好了,可以省去一半的比较。那才是,提高效率啊。
原帖由 "雨丝风片" 发表:
对于这种问题,一种最简单的优化就是稍微修改一下,
先通过++依次判断是否找到满足你条件元素,一旦找到
再判断下标是否在数组下标的合法范围之内,这样至少
可以避免每一轮循环都要先去判断下标是否合法。
原帖由 "mik" 发表:
(1)先找出非 0 元素? 还是找出 0 的元素? (找不到呢?? 继续找??)
原帖由 "雨丝风片" 发表:
我所说的并不局限于某个具体的问题,你想找什么样的元素就找什么样
的元素,条件是你自己定的,但这本质上是一个顺序查找的问题,我说
的只是对顺序查找的一般优化原则。
在楼主的程序中,使用了一个for循环..........
原帖由 "mik" 发表:
这个元素的选择会有一定困难,你不能担保这个元素在数组中是正常有用的。
原帖由 "mik" 发表:
如果,确定数组较大的。那么可以按 6 bytes 查、8 bytes
甚至更多。。。
这样是否更快。
原帖由 "mq110" 发表:
我想不是这样的... 32位机来说 按4bytes 应该是最快的. 个人理解.如不对请指教.
原帖由 "雨丝风片" 发表:
你在32位的机器上去判断一个64位的区域是否为空,请问你是如何
“比 4 bytes 省了一半的时间嘛”? :wink:
原帖由 "mik" 发表:
用事实说话,不用解释了,对比一下:)
不过是未在优化编译的。 不知优化编译后,是否一样。。。
原帖由 "雨丝风片" 发表:
我说过要“稍微修改一下”嘛,当然要做边界保护的,
比如说,可能要在数组的边界上放一个“多余”的元素。
原帖由 "mq110" 发表:
这个方法还是不错的.
通过雨丝风片的方法.
可以这样改进将最快.
先判断最后一个元素是不是0.
如果是0的话 将最后一个元素赋值为1.
然后开始从头 按雨丝风片 所说的方法来做.
这样保证即使全是0到最后肯定..........
原帖由 "雨丝风片" 发表:
不错,这样可以在不用另外增加一个元素的空间,只不过这是一种
破坏性的查找, ,查完了之后别忘了消灭作案痕迹,把最后一个
元素恢复原值才好。
原帖由 "mq110" 发表:
你的思想总是十分的开阔. 每次都让我有耳目一新的感觉.
呵呵 学习.
原帖由 "yzc2002" 发表:
不能修改最后一个的值,这个串一般是个const的
(1)串长可能为0
(2)如果是个字符串常量,这个修改可能会造成core dump
(3)如果这个串是静态的,则是线程不安全的,存在溢出的风险
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |