查找算法总结(一)

静态查找结构主要有两种:顺序查找、折半查找

一、顺序查找:这个就不用说了,一个一个的差吧,很差劲的算法了,时间复杂度是O(n)

     
public 
int 
shunXuSearch( 
int
[] b, 
int 
c) {
           
for 
( 
int 
i = 0; i < b. 
length
; i++) {
               
if 
(b[i] == c) {
                   System. 
out
.println( 
“查到了您想要的结果” 
+ c + 
“,位置在:” 
+ i);
                    
return 
i;
              }
          }
          System. 
out
.println( 
“sorry!没有查询到您想要的结果!” 
);
           
return 
-1;
     }
二、折半查找、二分查找:这个需要查找对象是有序的,每一次都找1/2的部分,查找次数大大的减少了。时间复杂度是O(logN)。
   折半查找其实就是一颗二叉树的遍历,其中,中间的元素就是二叉树的根。这里有个问题,如果这个根一年半载才查找一次,而这棵树的叶子需要1秒钟就查找一次,那么这种折半查找是否还有效率呢?就很坑了吧。所以才有了后面的集中查找算法。另外,如果想要添加、或者删除一个数据的时候,整个结构都需要重建,这个代价是不可估量的。
     
public 
int 
binarySearch( 
int
[] b, 
int 
c) {
           
// 这里需要先排序,假设已经是有序的数组了
           
int 
low = 0;
           
int 
high = b. 
length 
– 1;
           
int 
middle;
           
while 
(low <= high) {
              middle = (high + low) / 2;
               
if 
(c == b[middle]) {
                   System. 
out
.println( 
“您要找的结果” 
+ c + 
“已经找到,位置在:” 
+ middle);
                    
return 
middle;
              } 
else 
if 
(c > b[middle]) {
                   low = middle + 1;
              } 
else 
if 
(c < b[middle]) {
                   high = middle – 1;
              }
          }
          System. 
out
.println( 
“sorry!这里没有您想要的结果!” 
);
           
return 
-1;
     }


二叉树方面的查找算法请看下一篇文章:《查找算法总结(二)》


文章大部分都是总结于这两篇博客,在加上自己的分析:
http://hxraid.iteye.com/blog
http://blog.csdn.net/v_july_v/article/details/6530142#t0

    原文作者:查找算法
    原文地址: https://blog.csdn.net/liuyiy/article/details/24376205
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞