最近学习情况:
忙忙忙忙忙~~
啊,手机游戏卸载,小说不看了之后,感觉自己萌萌哒,就是有点困哈哈哈
当然了,最近的学习没有落下,现阶段的数据结构敲简单(可能还没有到难的地方),区区一个查找而已,最多是今天学习的平衡二叉树和二叉排序树稍微难了一点点。
最近写了很多博客,涉及很多方面,我发现写博客真的很不错,特别是那种回顾过往知识,一边更深层次的学习,一边复习的过程,非常的有利于知识点之间的串联与融会贯通。
特别是以前有些不会的经过这一次的学习之后都会有所提高,有所进步。
像是数据结构这种以前学习过的知识点,现在再次学习就会忍不住思考以前是怎么想的,以前的想法跟现在比有什么需要提升的地方~
所以我要更加努力的写博客鸭!
记录我成长的点点滴滴~(偷偷为之自己的将近两百篇博客而自豪~)
顺序表的查找分为顺序查找跟二分查找。
顺序查找
顺序查找:即一个个的遍历的查找。
代码就是写一个for循环从1找到n没有找到返回-1找到了返回下标。
需要注意的点有:
- 不要写着写着数组越界了
- 不要遍历到不该去的地方
顺序查找有个优化,就是设置一个哨兵。
哨兵的存在对时间复杂度没有任何的影响,但是会有效的防止越界的问题。
设置哨兵的顺序查找需要注意的地方:
- 最好是从后向前查找,找到下标0,一旦到达这理就说明没有找到
- 好处就是一定会返回一个下标,但只有非0的才有效
- 很好的避免了越界的行为
设置的方法就是将待查找的数值放到a[0]这个地方,从vnum开始向前查找。
二分查找
又称折半查找。
精髓在于一半区间一半区间的找,大大的缩小了时间复杂度(O(logn))。
折半查找形象的说,就像是找书的页码,不同的是,发现自己要的页码不再那个区间,就会将那半边的书撕掉,依次来缩小查找的范围。
二分查找需要注意的地方是:
- 只能在顺序表中查找(因为需要下标)
- 数据必须有序!
二分查找的关键代码为:
while(l<=r)
{
mid=(l+r)>>1;
if(mid>x) look(l,mid-1,x);
else look(mid+1,r,x);
}