首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

两个程序性能比较有关问题!

2012-03-16 
两个程序性能比较问题!急!!!对给定的值target,顺序查找数组arr中与target相等的元素两个算法:1.template

两个程序性能比较问题!急!!!
对给定的值target,顺序查找数组arr中与target相等的元素
两个算法:
1.
        template <typename   T>
        int   seqsearch1(const   T   arr[],int   n,T   &   target)
        {  
              for(int   i=0;arr[i]!=target;i++)
              {
                    if(i==n)
                    return   -1;     //查找失败
              }
              return   i;
        }

2.  
          template <typename   T>
          int   seqsearch2(const   T   arr[],int   n,T   &   target)
        {
                for(int   i=n;i--;)
                {
                      if(arr[i]==target)
                      return   i;
                }
                return   -1;     //查找失败
        }

请问一下哪个性能更高啊?还是一样?谢谢了~~~~~~

[解决办法]
一样.
[解决办法]
第一,你实测一下
第二,你需要多快?
[解决办法]
两个其实算法一样
[解决办法]
1 有问题,i的作用域是for内,离开for,i就没了
从算法上看,两个程序最差的情况下的循环次数和判断次数是一样的
[解决办法]
平均效率一样

#include "windows.h "
#include "stdio.h "


template <typename T>
int seqsearch1(const T arr[],int n,T & target)
{
int i;
for(i=0;arr[i]!=target;i++)
{
if(i==n)
return -1; //查找失败
}
return i;
}

template <typename T>
int seqsearch2(const T arr[],int n,T & target)
{
for(int i=n;i--;)
{
if(arr[i]==target)
return i;
}
return -1; //查找失败
}

void main() {

char str[] = "aafafjoquqonlajvfljafqioujljfaa ";
char c = 'v ';

DWORD s = 0;
DWORD d = 0;

int i = 1000000;
int r = 0;

s = GetTickCount();
while (i--)
r = seqsearch1(str, strlen(str), c);
d = GetTickCount();

printf( "%u\n ", d - s);

i = 1000000;
s = GetTickCount();
while (i--)
r = seqsearch2(str, strlen(str), c);
d = GetTickCount();

printf( "%u ", d - s);

}
[解决办法]
seqsearch1:Release的汇编码:
00401080 mov ecx,dword ptr [esp+0Ch]
00401084 mov edx,dword ptr [esp+4]
00401088 push ebx


00401089 xor eax,eax
0040108B mov cl,byte ptr [ecx]
0040108D mov bl,byte ptr [edx]
0040108F cmp bl,cl
00401091 push esi
00401092 je 004010AB
00401094 mov esi,dword ptr [esp+10h]
00401098 cmp eax,esi
0040109A je 004010A8
0040109C mov bl,byte ptr [eax+edx+1]
004010A0 inc eax
004010A1 cmp bl,cl
004010A3 jne 00401098
004010A5 pop esi
004010A6 pop ebx
004010A7 ret

seqsearch1:Release的汇编码:
004010B0 mov ecx,dword ptr [esp+8]
004010B4 test ecx,ecx
004010B6 push esi
004010B7 lea eax,[ecx-1]
004010BA je 004010D2
004010BC mov ecx,dword ptr [esp+10h]
004010C0 mov edx,dword ptr [esp+8]
004010C4 mov cl,byte ptr [ecx]
004010C6 cmp byte ptr [eax+edx],cl
004010C9 je 004010D5
004010CB mov esi,eax
004010CD dec eax
004010CE test esi,esi
004010D0 jne 004010C6
004010D2 or eax,0FFFFFFFFh
004010D5 pop esi
004010D6 ret

热点排行