mus*_*tze 0 c arrays algorithm search coding-style
我想实现一个Hash或类似PHP的数组.什么是更好的,选项a)或选项b)通过其键找到元素?
(所有变量都已设置并初始化,等等!)
一个)
for( i = 0; i < ary->element_cnt && found == NULL; i++ ) {
current_element = &(ary->elements[i]);
if( 0 == memcmp(current_element->key, search_key, keysize) ) {
found = current_element;
}
}
Run Code Online (Sandbox Code Playgroud)
b)
for( i = 0, current_element = &(ary->elements[i]) ;
i < ary->element_cnt &&
0 != memcmp(current_element->key, searchkey, keysize);
i++, current_element = &(ary->elements[i]) );
/*found = current_element;*/
Run Code Online (Sandbox Code Playgroud)
第一个更好,因为它更易读/可维护吗?第二个会更快吗?
在一个大循环中做所有事情是"糟糕的风格"吗?
我知道,那里有更好的搜索算法,但这不是我的问题!
这两个都是O(N)算法 - 它们都只是循环遍历数组并调用memcmp每个元素 - 所以它们应该执行类似的操作.主观上,我认为第一个更好,因为它更容易阅读.
但是,按键实现查找的最佳方法不是像这样的线性搜索,而是使用像哈希表或平衡二叉树这样的专用数据结构.像PHP这样的脚本语言通常使用哈希表来实现这样的查找.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |