求,验证数组中各元素互不相等的最佳算法

suiyun 2005-08-23 09:12:01
struct STRUCT {
int a;
int b;
char str[100];
}stArray[100];

用什么方法能够最快的判断出各个元素完全不同?即a,b,str都不相等
...全文
308 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
suiyun 2005-08-26
  • 打赏
  • 举报
回复
to megaboy:
如果是为了证明相等我会用
*p = &stArray[1];
iCount = sizeof(stArray)/sizeof(struct STRUCT) - 1;
while(stArray[0] == *p++ && iCount--);
这样还能减少对一个指针的递增操作。

不过要证明互不相等我实在没有想出好办法,期待高见
QuickKeyBoard 2005-08-25
  • 打赏
  • 举报
回复
这个容易,用个Hash吧,一定是最快速的了。
megaboy 2005-08-25
  • 打赏
  • 举报
回复
先谢谢楼上了。不过,我那个贴子的思路想错了,没看清楚楼主的意思。

这道题并不在于用memcpy还是指针,而是得有一个好思想来快速完成比较。原始的方法,是用两层for循环并使用strncmp来进行比较,但这显然效率太低。我现在还没有想出很好的方法。
lujun-cc 2005-08-25
  • 打赏
  • 举报
回复
我觉得回复人: megaboy(点背不能怨社会,命苦不能怪政府!) 的思路就很好!,只不过他判断的是是否相等,对他的代码稍做修改就好: == 换成 !=
dch4890164 2005-08-24
  • 打赏
  • 举报
回复
memcmp()
使用这个函数的注意不错,不过不知道是不是最快!!
jsjjms 2005-08-24
  • 打赏
  • 举报
回复
使用位操作快,。。。
qingyuan18 2005-08-24
  • 打赏
  • 举报
回复
mark 先
OpenHero 2005-08-24
  • 打赏
  • 举报
回复
直接用位操作 & | ! 操作
不过必须得考虑内存对齐 ~~~~这样是最快的
jixingzhong 2005-08-24
  • 打赏
  • 举报
回复
直接比较内存内容好了 ... memcmp()
suiyun 2005-08-24
  • 打赏
  • 举报
回复
楼上,要互不相同
megaboy 2005-08-24
  • 打赏
  • 举报
回复
更正一下,上面那句while循环应该改为这样:while(*p1++ == *p2++ && iCount > 0) --iCount;
megaboy 2005-08-24
  • 打赏
  • 举报
回复
在楼主“能够最快的判断出各个元素完全不同”的条件下,库函数不是好选择,每次比较都要产生调用的开销,花费太多。更好的选择,除了汇编,就是直接用指针操作了,三四行代码而已:

int iCount = sizeof(struct STRUCT);
char *p1 = &stArray[0], *p2 = &stArray[1];
while(*p1++ == *p2++ && iCount-- > 0);
if(iCount == 0) ........ //iCount=0表示相同

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧