实现顺序表的分块查找JAVA_查找一 线性表的查找

查找的基本概念

什么是查找?

查找是根据给定的某个值,在表中确定一个关键字的值等于给定值的记录或数据元素。

查找算法的分类

若在查找的同时对表记录做修改操作(如插入和删除),则相应的表称之为动态查找表;

否则,称之为静态查找表。

此外,如果查找的全过程都在内存中进行,称之为内查找;

反之,如果查找过程中需要访问外存,称之为外查找。

查找算法性能比较的标准

——平均查找长度ASL(Average Search Length)

由于查找算法的主要运算是关键字的比较过程,所以通常把查找过程中对关键字需要执行的平均比较长度(也称为平均比较次数)作为衡量一个查找算法效率优劣的比较标准。

2xZJJOroJfIpoU+GSLBQAAOw==

选取查找算法的因素

(1) 使用什么数据存储结构(如线性表、树形表等)。

(2) 表中的次序,即对无序表还是有序表进行查找。

顺序查找

要点

它是一种最简单的查找算法,效率也很低下。

存储结构

没有存储结构要求,可以无序,也可以有序。

基本思想

从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;

若扫描结束仍没有找到关键字等于k的结点,表示查找失败。

核心代码

public int orderSearch(int[] list, int length, int key) {

//从前往后扫描list数组,如果有元素的值与key相等,直接返回其位置    for (int i = 0; i 

if (key == list[i]) {

return i;

}

}

//如果扫描完,说明没有元素的值匹配key,返回-1,表示查找失败    return -1;

}

算法分析

顺序查找算法最好的情况是,第一个记录即匹配关键字,则需要比较 1 次;

最坏的情况是,最后一个记录匹配关键字,则需要比较 N 次。

所以,顺序查找算法的平均查找长度为

ASL = (N + N-1 + ... + 2 + 1) / N = (N+1) / 2

顺序查找的平均时间复杂度为O(N)。

二分查找

要点

二分查找又称折半查找,它是一种效率较高的查找方法。

存储结构

使用二分查找需要两个前提:

(1) 必须是顺序存储结构。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
顺序查找算法,也称为线性查找算法,是一种简单直观的查找算法。它的基本思想是从线性表的一端开始,逐个对比查找元素,直到找到目标元素或搜索到线性表的末尾为止。 下面是实现线性表顺序查找算法的示例代码: ```c #include <stdio.h> #define MAXSIZE 100 // 定义线性表最大长度 // 定义线性表结构体 typedef struct { int data[MAXSIZE]; // 存储数据元素 int length; // 线性表长度 } SqList; // 线性表顺序查找算法 int Search_Seq(SqList L, int key) { int i; for (i = 0; i < L.length; i++) { if (L.data[i] == key) { return i; // 查找成功,返回元素下标 } } return -1; // 查找失败,返回-1 } int main() { SqList L = {{1, 3, 5, 7, 9}, 5}; // 初始化线性表 int key = 5; // 要查找的元素值 int result = Search_Seq(L, key); // 进行顺序查找 if (result == -1) { printf("查找失败!\n"); } else { printf("元素%d的位置为%d\n", key, result); } return 0; } ``` 在上面的示例代码中,我们先定义了一个结构体 `SqList` 用来表示线性表,其中包括一个数组 `data` 用来存储数据元素,和一个变量 `length` 表示线性表长度。然后定义了一个函数 `Search_Seq` 用来进行线性表顺序查找,该函数接收两个参数:线性表 `L` 和要查找的元素值 `key`,返回值为目标元素在线性表中的下标,如果查找失败则返回-1。最后在 `main` 函数中初始化了一个线性表 `L`,并进行了一次元素为5的顺序查找

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值