今天偶然看到一个很巧的查找技巧,跟大家分享一下。
假设有一个数组a,要找到一个n使a[n]=key。
很简单吧,先看看一般的方法:
for(i = 1; i <= a.length; i++) if(a[i] == key) break; // now a[i] = key, i > a.length means not found.
看看很巧的用哨兵的方法:
a[0] = key; for(i = a.length; ; i--) if(a[i] == key) break; // now a[i] = key, i = 0 means not found.
这样加上一个小小的哨兵(a[0])就节省了大约一半的时间!其实挺实用的。
用在链表的话更好吧, 数组不是有折半之类的算法吗? 当然你只是用数组演示。
这是在无序表查找时用的。有序表当然可以折半啦!
果然数组只是演示