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