我勒個(gè)去,怎么變得這么長,但的確是減少了判斷的次數(shù),如果數(shù)組較大的話提高運(yùn)行速度肯定是一定的,如果你非要說數(shù)組很小的話,說不定速度還要降低呢,那你不這樣寫不就得了,好了廢話少說,雖然代碼已經(jīng)很簡單明了了,但我還是簡單說一下思路。
就是在數(shù)組的末尾加一個(gè)哨兵,即使不判斷i也能確保數(shù)組不越界,加了哨兵之后if語句是必然會(huì)break的。
先判斷最后一個(gè)元素的值是不是我們要查找的數(shù),如果是,返回其下標(biāo);如果不是,將最后一個(gè)數(shù)的值保存起來,將要查找的那個(gè)數(shù)賦給最后一個(gè)元素,循環(huán)查找指定的元素,不用判斷數(shù)組越界,if語句必然break,將最后一個(gè)元素的值還原,最后只用判斷i,如果是i即為所求,否則要查找的元素不在數(shù)組中。
最后在做一個(gè)簡單的性能測試,看到底能否提高查找速度。
測試代碼如下:
123456789101112131415161718voidtestFind(){ intN=200000; int*A=newint[