順序查找監(jiān)視哨的作用 請(qǐng)問什么是監(jiān)視哨或哨兵(Sentinel)?
請(qǐng)問什么是監(jiān)視哨或哨兵(Sentinel)?算法中引入的附加記錄R[0]稱為sentinel。哨兵有兩個(gè)功能:①在進(jìn)入搜索(插入位置)循環(huán)之前,它保留一個(gè)R[i]的副本,這樣R[i]的內(nèi)容就不會(huì)因?yàn)橛?/p>
請(qǐng)問什么是監(jiān)視哨或哨兵(Sentinel)?
算法中引入的附加記錄R[0]稱為sentinel。哨兵有兩個(gè)功能:
①在進(jìn)入搜索(插入位置)循環(huán)之前,它保留一個(gè)R[i]的副本,這樣R[i]的內(nèi)容就不會(huì)因?yàn)橛涗浵蚝笠苿?dòng)而丟失;
②它的主要功能是監(jiān)視下標(biāo)變量J在搜索循環(huán)中是否越界。一旦超出界限(即J=0),因?yàn)镽[0]。與自身相比,循環(huán)判定條件是不成立的,這使得搜索循環(huán)結(jié)束,從而避免了每次在循環(huán)中檢測J是否越界的需要(即省略循環(huán)判定條件J>=1)。注:實(shí)際上,為簡化邊界條件而引入的所有附加節(jié)點(diǎn)(元素)都可以稱為sentinel。[例]單鏈表中的頭節(jié)點(diǎn)實(shí)際上是一個(gè)哨兵。2哨兵的引入將測試和發(fā)現(xiàn)循環(huán)條件的時(shí)間減少了一半左右,因此對(duì)于記錄量大的文件來說節(jié)省的時(shí)間是相當(dāng)可觀的。對(duì)于像排序這樣經(jīng)常使用的算法,我們應(yīng)該盡量減少它的運(yùn)行時(shí)間。因此,上述算法中的哨兵不能視為一項(xiàng)小技巧,而應(yīng)深刻理解和掌握。
C語言,直接插入排序的算法中監(jiān)視哨怎么理解呢,我知道它是為了避免數(shù)據(jù)后移時(shí)消失,我不是很理解,但是i?
sentinel的目的是避免檢查指針J>0,其中s[0]不僅充當(dāng)sentinel,還充當(dāng)臨時(shí)變量,從而避免在while循環(huán)中為交換賦值三次。如果你結(jié)合我的代碼,你就會(huì)明白。Void import(int s[],int n){int i,J,temp for(i=2i0){temp=s[J]s[J]=s[J 1]s[J 1]=temp J--}
n個(gè)元素需要比較一次,但都不成功。最后,哨兵還需要比較一次,哪個(gè)比較成功,一共N次。示例:有五個(gè)元素:1、2、3、4、5。你要找的元素是8。那么8是哨兵。順序如下:8、1、2、3、4、5。從5開始,你需要比較6次。比較是成功的。sentinel的下標(biāo)是0,因此返回值是0。