数据结构与算法随笔之------哨兵变量

版权声明:欢迎转载,但转载时请注明原文地址 https://blog.csdn.net/weixin_42110638/article/details/83983730

1. 哨兵(sentinel )
哨兵:顾名思义,指站岗、放哨、巡逻、稽查的士兵。

常用来作为比较, 
比大小,快排
比相等与否,判等;

int i = 0;
while ( i < 10 ){
    ...
    ++i;
}


1
2
3
4
5
while 循环中的变量 i 控制着最终的循环次数。这是非常流行的一个表示法,具有这个作用的变量有时也称为哨兵变量(Sentinel variable)。

再比如快排,

就是 sentinel ,就是用来指定一个位置的特殊元素,比如快速排序里面,需要选一个变量作为中间值,这个值就是一个 sentinel,又比如用来指示一个队列尾部位置的变量。

2. 哨兵的应用:简化边界条件的处理

比如关于堆的创建与插入操作

不知道这两张图你能不能看懂

就是如果你不设置了哨兵,你的for循环的判断条件就是在原本的基础上加上i > 1

for ( ; H->Data[i/2] < X && i > 1; i/=2 )

因为如果你要插入的数比数组中所有元素都要大,那就要一直往上(前)比,比到最上面时,这个数的下标就为0了,要知道堆的创建是从下标一开始的,那就说明这时候要插入的数已经在数组外面了,这很明显不对。所以此时要加入判断条件i > 1

但是如果你设置了哨兵变量为最大值,所以就不会出现上面那张情况,因为你插入到元素肯定比哨兵要小,这样做可以简化判断条件,避免出错

猜你喜欢

转载自blog.csdn.net/weixin_42110638/article/details/83983730