数据结构中查找的知识点主要有以下三点
1、静态查找
1.1 顺序查找
1.2 有序表
1.2.1 二分查找
1.2.2 插值查找
2、动态查找
2.1 二叉排序树
2.2 平衡二叉树
2.3 B-和B+树
3、哈希查找
3.1 常用哈希函数
3.2 解决冲突的办法
1.2.1.1 非递归实现
实现思路:
1、low=0,high=len-1;
2、mid=(low+high)/2;
3、中间值小于目标值,high=mid-1
4、中间值大于目标值,low=mid+1
5、重复
public static int binarySearch(int[] data,int dest) { int high=data.length-1,low=0; int mid=0;//中间值 int index=-1;//位置 while(low<=high) { mid=(high+low)/2; if(dest>data[mid]) low=mid+1; else if(dest<data[mid]) high=mid-1; else {index=mid;break;} } return index; }
1.2.1.2 递归实现
实现思路:
将high,low作为参数传入即可
public static int binarySearch(int[] data,int dest,int high,int low) { int mid=0; if(low<=high) { mid=(high+low)/2; if(dest>data[mid]) return binarySearch(data, dest, high, mid+1); else if(dest<data[mid]) return binarySearch(data, dest, mid-1, low); else {return mid;} } else return -1; }
1.2.2 插值查找
对二分查找的改进
mid=low+(dest-data[low])/(data[high]-data[low])*(high-low);
public static int binarySearch(int[] data,int dest,int high,int low) { int mid=0; if(low<=high) { mid=low+(dest-data[low])/(data[high]-data[low])*(high-low); if(dest>data[mid]) return binarySearch(data, dest, high, mid+1); else if(dest<data[mid]) return binarySearch(data, dest, mid-1, low); else {return mid;} } else return -1; }
2.1 二叉排序树
二叉排序树要么是空树,要么具有下列性质
1> 若左子树不为空,则左子树上所有节点的值均小于根节点的值;若右子树不为空,则右子树上所有节点的值均大于根节点的值。
2> 左右子树都是二叉排序树
BST的查找和二分查找类似,只不过将mid变成了根节点。
BST类