静态查找结构主要有两种:顺序查找、折半查找
一、顺序查找:这个就不用说了,一个一个的差吧,很差劲的算法了,时间复杂度是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