1,顺序查找
条件:无
原理:按顺序比较每个元素,直到找到或遍历完元素为止
时间复杂度:O(n)
private static int findSequent(int[] arr,int k){
int p = -1;
for(int i=0;i<arr.length;i++){
if(k == arr[i]){
p = i;
break;
}
}
return p;
}
2,二分(折半)查找
条件:有序数组
原理:取数组中间元素和目标值比较,如果相等则找到,如果小于目标值,则在右边找,如果小,则在左边找。找到或找完所有元素位置。
时间复杂度:O(logN)
private static int findHalf(int[] arr,int k){
int p = -1;
int high = arr.length-1;
int low = 0;
while(low <= high){
int middle = (high + low)/2;
if(arr[middle] == k){
p = middle;
break;
}
if(arr[middle] > k){
high = middle-1;
}else if(arr[middle] < k){
low = middle+1;
}
}
return p;
}
3,二叉树查找
条件:先创建二叉排序树:
1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
3. 它的左、右子树也分别为二叉排序树。
原理:
在二叉查找树b中查找x的过程为:
1. 若b是空树,则搜索失败,否则:
2. 若x等于b的根节点的数据域之值,则查找成功;否则:
3. 若x小于b的根节点的数据域之值,则搜索左子树;否则:
4. 查找右子树。
时间复杂度:
4,哈希查找
条件:先创建哈希表(散列表)
原理:根据键值方式(Key value)进行查找,通过散列函数,定位数据元素。
时间复杂度:几乎是O(1),取决于产生冲突的多少。
参考
http://www.cnblogs.com/274914765qq/p/4378620.html
http://yinger-fei.iteye.com/blog/1946460