关于数组查找特定元素的几种常用算法简介


1.顺序查找:

顺序查找也称为线形查找,从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。 、

代码实现如下:

/**
*
* @param a-需要被查找的数组
* @param s-需要查找的元素
* @return int -返回查找到的索引值,-1表示没查到
*/
public static int seek(int[] a , int s){
for(int i = 0; i < a.length;i++){
if(a[i]==s){
return i;
}
}
return -1;
}

2.二分查找:

二分查找要求线形表中的结点按关键字值升序或降序排列,用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。

代码实现如下:


/**
*
* @param a 需要被查找的数组
* @param front 数组的第一个索引
* @param end 数组的最后一个索引
* @param seekFalue 需要查找的元素
* @return int 返回查到的元素索引,-1表示
*/
public static int seek(int[] a, int front, int end, int seekFalue) {
if (front <= end) {
int mid = (front + end) / 2;
if (a[mid] == seekFalue) {
return mid;
} else if (a[mid] > seekFalue) {
return seek(a, front, mid - 1, seekFalue);
} else if (a[mid] < seekFalue) {
return seek(a, mid + 1, end, seekFalue);
}
}
return -1;
}

3.分块查找:

分块查找也称为索引查找,把线形分成若干块,在每一块中的数据元素的存储顺序是任意的,但要求块与块之间须按关键字值的大小有序排列,还要建立一个按关键字值递增顺序排列的索引表,索引表中的一项对应线形表中的一块,索引项包括两个内容:① 键域存放相应块的最大关键字;② 链域存放指向本块第一个结点的指针。分块查找分两步进行,先确定待查找的结点属于哪一块,然后在块内查找结点。

代码实现如下:

4.哈希表查找:

哈希表查找是通过对记录的关键字值进行运算,直接求出结点的地址,是关键字到地址的直接转换方法,不用反复比较。假设f包含n个结点,Ri为其中某个结点(1≤i≤n),keyi是其关键字值,在keyi与Ri的地址之间建立某种函数关系,可以通过这个函数把关键字值转换成相应结点的地址,有:addr(Ri)=H(keyi),addr(Ri)为哈希函数。 
代码实现如下:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM