循环数组,更好,更快等等?

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)

第一个更好,因为它更易读/可维护吗?第二个会更快吗?

在一个大循环中做所有事情是"糟糕的风格"吗?

我知道,那里有更好的搜索算法,但这不是我的问题!

Cha*_*via 5

这两个都是O(N)算法 - 它们都只是循环遍历数组并调用memcmp每个元素 - 所以它们应该执行类似的操作.主观上,我认为第一个更好,因为它更容易阅读.

但是,按键实现查找的最佳方法不是像这样的线性搜索,而是使用像哈希表或平衡二叉树这样的专用数据结构.像PHP这样的脚本语言通常使用哈希表来实现这样的查找.