這篇文章主要介紹了C/C++中如何提高查找速度,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)建站主營(yíng)云陽(yáng)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都app開(kāi)發(fā),云陽(yáng)h5小程序定制開(kāi)發(fā)搭建,云陽(yáng)網(wǎng)站營(yíng)銷(xiāo)推廣歡迎云陽(yáng)等地區(qū)企業(yè)咨詢
示例:
//在一個(gè)int數(shù)組中查找某個(gè)元素 int find(int A[],int n,int element) { for( int i = 0; i < n; i++ ) { if( A[i] == element ) return i; } return -1; } //在一個(gè)字符串中查找某個(gè)字符 int find(string& str,char c) { for( int i = 0; i < str.length(); i++ ) { if( str[i] == c ) return i; } return -1; }
雖然每次都是寫(xiě)出這樣的代碼,但我總覺(jué)得for循環(huán)中的<判斷有點(diǎn)多余,比如數(shù)組中有100個(gè)元素,我們明明知道前99個(gè)是不會(huì)數(shù)組越界的,根本不需要判斷i 通過(guò)哨兵的方式去掉這多余的判斷,將上面兩個(gè)方法改造如下: 我勒個(gè)去,怎么變得這么長(zhǎng),但的確是減少了判斷的次數(shù),如果數(shù)組較大的話提高運(yùn)行速度肯定是一定的,如果你非要說(shuō)數(shù)組很小的話,說(shuō)不定速度還要降低呢,那你不這樣寫(xiě)不就得了,好了廢話少說(shuō),雖然代碼已經(jīng)很簡(jiǎn)單明了了,但我還是簡(jiǎn)單說(shuō)一下思路。 就是在數(shù)組的末尾加一個(gè)哨兵,即使不判斷i 先判斷最后一個(gè)元素的值是不是我們要查找的數(shù),如果是,返回其下標(biāo);如果不是,將最后一個(gè)數(shù)的值保存起來(lái),將要查找的那個(gè)數(shù)賦給最后一個(gè)元素,循環(huán)查找指定的元素,不用判斷數(shù)組越界,if語(yǔ)句必然break,將最后一個(gè)元素的值還原,最后只用判斷i 最后在做一個(gè)簡(jiǎn)單的性能測(cè)試,看到底能否提高查找速度。 測(cè)試代碼如下: 運(yùn)行結(jié)果如下: 速度還是會(huì)快一點(diǎn) 感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C/C++中如何提高查找速度”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!//在一個(gè)int數(shù)組中查找某個(gè)元素
int find1(int A[],int n,int element)
{
if( n <= 0 )
return -1;
if( A[--n] == element )
return n;
int hold = A[n];
A[n] = element;
int i = 0;
for( ; ; i++ )
{
if( A[i] == element )
break;
}
A[n] = hold;
return i < n ? i : -1;
}
//在一個(gè)字符串中查找某個(gè)字符
int find1(string& str,char c)
{
int n = str.length();
if( n <= 0 )
return -1;
if( str[--n] == c )
return n;
int hold = str[n];
str[n] = c;
int i = 0;
for( ; ; i++ )
{
if( str[i] == c )
break;
}
str[n] = hold;
return i < n ? i : -1;
}
void testFind()
{
int N = 200000;
int* A = new int[N];
A[N-2] = 1;
DWORD start = ::GetTickCount64();
for( int i = 0; i < 10000; i++ )
find(A,N,1);
DWORD end = ::GetTickCount64();
cout <<"優(yōu)化前:" << end - start <<" 毫秒" << endl;
start = ::GetTickCount64();
for( int i = 0; i < 10000; i++ )
find1(A,N,1);
end = ::GetTickCount64();
cout <<"優(yōu)化后:" << end - start <<" 毫秒" << endl;
}
分享名稱:C/C++中如何提高查找速度
文章鏈接:http://weahome.cn/article/iiphej.html