查找概述
l查找——也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素
l关键字——是数据元素中某个数据项的值,它可以标识一个数据元素
l查找方法评价
u查找速度
u占用存储空间多少
u算法本身复杂程度
u平均查找长度ASL(AverageSearchLength):为确定记录在表中的位置,需和给定值进行比较的关键字的个数的期望值叫查找算法的
顺序查找
查找过程:从表的一端开始逐个进行记录的关键字和给定值的比较
算法描述
顺序查找方法的ASL
折半查找
l查找过程:每次将待查记录所在区间缩小一半
l适用条件:必须采用顺序存储结构的有序表
l算法实现
u设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值
u初始时,令low=1,high=n,mid=ë(low+high)/2û
u让k与mid指向的记录比较
u若k==r[mid].key,查找成功
u若k<r[mid].key,则high=mid-1
u若k>r[mid].key,则low=mid+1
u重复上述操作,直至low>high时,查找失败
算法描述
分块查找
查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找
适用条件:分块有序表
算法实现
用数组存放待查记录,每个数据元素至少含有关键字域
建立索引表,每个索引表结点含有最大关键字域和指向本块第一个结点的指针
算法描述
查找方法比较
|
顺序查找
|
折半查找
|
分块查找
|
ASL复杂度
|
最大
|
最小
|
两者之间
|
表结构
|
有序表、无序表
|
有序表
|
分块有序表
|
存储结构
|
顺序存储结构
线性链表
|
顺序存储结构
|
顺序存储结构
线性链表
|
其它查找方法
哈希查找
二叉查找
查找类的实现
Find.java
package datastructure.find;
import datastructure.common.Strategy;
/**
* 查找
* @author luoweifu
*
*/
public class Find {
/**
* 顺序查找
* @param s 要排序的数组
* @param key 关键字
* @return 查找到的下标
*/
public static int arraySearch(int s[], int key) {
for(int i=0; i<s.length; i++) {
if(key == s[i])
return i;
}
return -1;
}
/**
* 折半查找的非递归实现
* @param s 要排序的数组
* @param low 最低点
* @param high 最高点
* @param key 关键字
* @return 查找到的下标
*/
public static int binSearch(int []s, int low, int high, int key) {
while(low <= high) {
int mid = (low + high)/2;
if(s[mid] == key) return mid;
else if(s[mid] > key) high = mid-1;
else low = mid +1;
}
return -1;
}
}
StrategyCompare.java
package datastructure.find;
import datastructure.common.Strategy;
/**
* 比较策略
* @author luoweifu
*
*/
public class StrategyCompare implements Strategy{
public boolean equal(Object obj1, Object obj2) {
// TODO Auto-generated method stub
return false;
}
@Override
public int compare(Object obj1, Object obj2) {
Integer n1 = (Integer)obj1;
Integer n2 = (Integer)obj2;
return n1.compareTo(n2);
}
}
测试
package datastructure.find;
public class Test {
//测试
public static void main(String args[]) {
int a[] = {0,1,2,3,4,5,6,7,8,9};
int n;
n = Find.arraySearch(a, 5);
//n = Find.binSearch(a, 0, 9, 5);
System.out.println(n);
}
}
结果:
5
分享到:
相关推荐
C语言实现顺序表的顺序查找和折半查找 在计算机科学中,查找是指在一组数据中找到特定元素的过程。顺序表是一种基本的数据结构,在实际应用中非常常见。因此,学习如何在顺序表中实现查找是非常重要的。下面,我们...
"折半查找(二分查找)" 折半查找(二分查找)是一种高效的查找算法,对于顺序存储的有序表,可以快速地找到指定的关键字记录。该算法的基本思想是,每次比较给定值 K 与中间位置记录的关键字值,并根据比较结果...
以下是四种常见的查找算法:顺序查找、二分查找、插值查找和动态查找。 顺序查找 顺序查找是一种最简单的查找算法,它的实现方式是从数组或链表的第一个元素开始,逐个比较元素直到找到目标元素或达到数组或链表的...
在计算机科学中,查找算法是数据结构和算法领域中的核心概念,用于在数据集合中寻找特定元素。这里我们将深入探讨两种常见的查找算法:二分查找和顺序查找。 **一、顺序查找** 顺序查找是最基础的查找算法之一。它...
查找问题(顺序查找法, 折半查找法,)基本思想:一列数放在数组a(1)---a(n)中,待查找的数放在x 中,把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使x与a(p)比较,如果x不等于a...
本文将详细探讨四种常见的查找算法:顺序查找、折半查找、二叉排序树查找以及哈希表查找,并结合提供的"综合查找算法"课程设计项目,解析其在实际应用中的特点和优势。 **顺序查找**是最基础的查找算法,适用于任何...
在IT领域,查找算法是数据结构与算法中的基础部分,对于高效地处理信息至关重要。这里我们主要探讨两个经典的查找算法:顺序查找和折半查找,它们都是在有序或无序数据集合中寻找特定元素的方法。 **顺序查找**,也...
### 静态查找表与折半查找算法 在计算机科学中,静态查找表是一种用于存储数据并能够高效检索特定元素的数据结构。本篇文章将详细解释如何实现一个静态查找表,并利用折半查找算法(也称二分查找算法)来查询表中的...
本文将详细介绍三种常见的查找算法:二分查找、插值查找和斐波那契查找,并以C++语言为例,阐述它们的核心实现原理。 1. **二分查找(Binary Search)** 二分查找是一种基于有序数组的高效查找算法。它的工作原理...
数据结构中的查找是计算机科学中一个基础且重要的概念,它涉及到如何在一组数据中找到特定的信息。本实验报告主要关注两种查找算法的实现:顺序查找和二分查找,这两种方法在不同的场景下各有优势。 首先,顺序查找...
在给定的标题“顺序查找和折半查找在10个元素中查找20”中,我们关注的是两种基本的查找算法:顺序查找(Sequential Search)和折半查找(Binary Search)。这些算法在处理有序或无序数据集时各有优势,下面我们将...
动态查找表是数据结构中的一个重要概念,主要用于高效地进行数据的插入、删除和查找操作。在计算机科学中,数据结构的选择直接影响到算法的效率和程序的性能。动态查找表是一种可以随数据变化而动态调整其结构的表,...
在本项目中,我们关注的是“静态查找表”,这是一个常见的数据结构,用于快速查找特定元素。静态查找表通常是在内存中预先分配好空间,并且在程序运行期间其大小不会发生变化的数据结构。 在数据结构中,查找操作是...
二分查找算法 二分查找算法是一种高效的查找算法,适用于已经排好序的数组或链表中查找特定的元素。该算法的时间复杂度为O(log n),远远优于顺序查找算法的O(n)。 二分查找算法的基本思想是将数组或链表分成两个...
本实验主要探讨了三种基本的查找算法:顺序查找、折半查找(二分查找)和索引查找,这些算法都是在数组或集合中寻找特定元素的重要方法。下面将详细解释这三种查找算法,并结合C语言编程环境进行深入分析。 1. **...
### 区间表的快速查找算法 #### 一、引言 在许多应用领域中,尤其是在涉及大量数据处理的行业中,比如电信业,高效的查找算法是确保系统性能的关键因素之一。传统的查找方法如折半查找虽然简单易实现,但在面对大...
在本教程中,我们将深入探讨几个关键的数据结构:栈、队列、二叉树、顺序查找、二分查找以及图的遍历。这些基础知识对于理解和编写高效的算法至关重要。 1. 栈(Stack) 栈是一种后进先出(LIFO)的数据结构,类似...
在Excel VBA编程中,有时候我们需要在特定的区域内查找特定的文本,并获取包含该文本的单元格。这个任务可以通过编写自定义的VBA宏来实现。以下是对标题和描述中涉及的知识点的详细解释。 首先,VBA(Visual Basic ...
这种结构使得二叉排序树在插入、删除和查找操作上的性能表现优秀,尤其在树保持平衡的情况下。 1. **二叉排序树的插入操作**: 插入新节点时,首先与根节点比较。如果新节点的值小于根节点,则插入到左子树;反之...
"易语言快速查找文本"是易语言编程中一个常见的话题,主要涉及文本处理和内存操作,这对于开发文本处理软件、搜索工具或者数据分析应用来说至关重要。 在易语言中,快速查找文本涉及到字符串处理和算法优化。常见的...