冒泡之后--------浅谈检索

    今天很是得意终于将自己的一点心得拿出去分享,不想却受更大打击.本以为通过优化的冒泡算法足可以应付. 当我拿着前篇文章与惜日的同事(论起等级来此人算我的启蒙老师)交流的时候,又一次体现出了自己的菜.

   经此君(我叫他啊明,龙港人,据说与我隔江相望十几年)不耐烦指点,终于领悟,冒泡实现起来容易,效率却是很低,相比快速排序,希尔排序等有其先天不足(上述2种排序,只大2数据结构时接触过,至于核心是什么,打从当初我就没有掌握过...汗)

  由于今天开博第一天,哥哥心情好,晚上再写一篇,为了开这博客最近我可没少努力,专研了好些东西,继续努力修炼内功.

                                                                                    检         索

   之所以在冒泡之后写关于检索的文章是因为这段时间看过了一些这方面的书籍,2者有着一定的联系.......
各位是否用过 IndexOf()  或者  LasIntdexOf()  用的时候有想起过他的原理吗?  呵呵 现在开发平台太先进了,类库太发达了,什么都给我们写好了,一般的开发人员是不必写什么检索方法,甚至不用去理它用就是了,(just use it)但是若甘于停留在这样的水平上想必很难有所大作为, 这也许就是有的人能用.net开发而不知道C#基本原理的原因吧,我自己也是这样,一段时间之后发现自己很难再进步了.周而复始地拖控件.设属性.用别人写好的东西.内功太重要了啊......(深受罗小平(大家应该认识吧)的影响)

   在一堆文件,一本书中查找某个主题,一串数字中找出特定的一个等,这些都是检索.通过检索我们可以让计算机查阅大量的信息,得到我们想要的.

一:顺序检索
我们可以一个一个地找从最开始到最后,称这种方式为"线性" 如下:

for(int i ; i< list.length; i++)
{
  if(list[ i ]==keyword)
   return i;     
  else
   return -1;   //没有找到
}

一个个地检索,效率低下可想而知,那么我们是否可以利用冒泡来对检索做点贡献呢?  哈哈..... 相信大家都已经明白

二:二分检索
先将数组排序,然后重复用检索值与数组片段(会被不断地从中间处截断)的中间索引值进行比较,将数组分为2半,一半进一步检索,另一半舍弃. 如下:

int low=0    //初始低端,为数组开始下标
int higth=list.length-1  //初始高端,为数组结束下标
int middle 
while(low<higth)
{
  middle=(low+higth)/2;
  if(keyword>list[ middle ])      //索引值在上半部分
    low=middle+1;     //重新设置low值,进行下次检索
  else  if(keyword<list[ middle ])
    higth=middle-1;
  else
   return middle;
}
return -1;     //没有检索到

 二分检索的一个最重要的前提就是数组要循序排列好,这也就是我为什么要在冒泡之后写检索的原因所在了..

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值