数据结构--》掌握数据结构中的查找算法

这篇具有很好参考价值的文章主要介绍了数据结构--》掌握数据结构中的查找算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        当你需要从大量数据中查找某个元素时,查找算法就变得非常重要。

        无论你是初学者还是进阶者,本文将为你提供简单易懂、实用可行的知识点,帮助你更好地掌握查找在数据结构和算法中的重要性,进而提升算法解题的能力。接下来让我们开启数据结构与算法的奇妙之旅吧。

目录

查找的基本操作

二叉排序树

平衡二叉树

红黑树的基本操作

B树

哈希(散列)表基本操作


查找的基本操作

查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。

查找表:用于查找的数据集合称为查找表,它由同一类型的数据元素(或记录)组成。

关键字:数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的。

查找长度:在查找运算中,需要对比关键字的次数称为查找长度。

平均查找长度(ASL):所有查找过程中进行关键字的比较次数的平均值。

ASL的数量级反应了查找算法时间复杂度:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

顺序查找又称 “线性查找”,通常用于线性表。其算法思想是:从头到尾挨个查找(反过来也可以)。

下面是用 C 语言实现顺序查找算法的基本代码示例:

#include <stdio.h>

int sequentialSearch(int array[], int n, int target) {
    for (int i = 0; i < n; i++) {
        if (array[i] == target) {
            return i; // 找到匹配的元素,返回索引
        }
    }
    return -1; // 未找到匹配的元素,返回-1
}

int main() {
    int array[] = {9, 5, 7, 3, 2, 8};
    int n = sizeof(array) / sizeof(array[0]);
    int target = 7;

    int result = sequentialSearch(array, n, target);

    if (result == -1) {
        printf("未找到目标元素\n");
    } else {
        printf("目标元素在索引 %d 处\n", result);
    }

    return 0;
}

回顾重点,其主要内容整理成如下内容:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

折半查找又称 “二分查找”,仅适用于有序的顺序表。二分查找通过将待查找的数据与数据集合的中间元素进行比较,从而将查找范围缩小一半,重复这个过程直到找到匹配的元素或者确定找不到为止。

下面是折半查找的相关概念及代码实现(使用C语言):

#include <stdio.h>

int binarySearch(int array[], int low, int high, int target) {
    while (low <= high) {
        int mid = (low + high) / 2;

        if (array[mid] == target) {
            return mid; // 找到匹配的元素,返回索引
        } else if (array[mid] < target) {
            low = mid + 1; // 目标在当前中间元素的右侧
        } else {
            high = mid - 1; // 目标在当前中间元素的左侧
        }
    }

    return -1; // 未找到匹配的元素,返回-1
}

int main() {
    int array[] = {2, 3, 5, 7, 8, 9};
    int n = sizeof(array) / sizeof(array[0]);
    int target = 7;

    int result = binarySearch(array, 0, n - 1, target);

    if (result == -1) {
        printf("未找到目标元素\n");
    } else {
        printf("目标元素在索引 %d 处\n", result);
    }

    return 0;
}

回顾重点,其主要内容整理成如下内容: 

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

分块查找也称索引顺序查找,是一种将数据集合划分为多个块,并在每个块中建立索引来加速查找过程的一种查找算法。它适用于数据集合较大且有序的情况。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

下面是分块查找的相关概念及代码实现(使用C语言):

#include <stdio.h>

// 定义数据块结构
typedef struct {
    int index; // 索引值
    int max;   // 当前块的最大值
} Block;

int blockSearch(int blocks[], int n, int m, int target) {
    // 首先找到所在块的索引
    int blockIndex = -1;
    for (int i = 0; i < n; i++) {
        if (blocks[i].max >= target) {
            blockIndex = i;
            break;
        }
    }

    // 若未找到所在块,则目标元素不存在
    if (blockIndex == -1) {
        return -1;
    }

    // 在对应块内顺序查找目标元素
    int start = blockIndex * m; // 块的起始位置
    int end = (blockIndex + 1) * m - 1; // 块的结束位置

    for (int i = start; i <= end; i++) {
        if (blocks[i] == target) {
            return i; // 找到匹配的元素,返回索引
        }
    }

    return -1; // 未找到匹配的元素,返回-1
}

int main() {
    Block blocks[] = {{0, 3}, {4, 7}, {8, 11}, {12, 14}};
    int n = sizeof(blocks) / sizeof(blocks[0]);
    int m = 4;
    int target = 10;

    int result = blockSearch(blocks, n, m, target);

    if (result == -1) {
        printf("未找到目标元素\n");
    } else {
        printf("目标元素在索引 %d 处\n", result);
    }

    return 0;
}

回顾重点,其主要内容整理成如下内容:  

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

二叉排序树

二叉排序树又称 “二叉查找树”,一颗二叉树或者是空二叉树,或者是具有如下性质的二叉树:

左子树上所有结点的关键字均小于根结点的关键字

右子树上所有结点的关键字均大于根结点的关键字

左子树和右子树又各是一颗二叉排序树:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

以下是二叉排序树查找、插入、删掉等相关的操作代码:

#include <stdio.h>
#include <stdlib.h>

// 二叉树节点定义
typedef struct TreeNode {
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
} TreeNode;

// 查找二叉排序树中是否存在指定值,存在返回1,不存在返回0
int searchBST(TreeNode* root, int val) {
    if (root == NULL) {
        return 0;
    }
    if (root->val == val) {
        return 1;
    } else if (root->val > val) {
        return searchBST(root->left, val);
    } else {
        return searchBST(root->right, val);
    }
}

// 插入值为val的节点到二叉排序树中,返回插入后的根节点
TreeNode* insertBST(TreeNode* root, int val) {
    // 如果当前根节点为空,则直接将新节点插入
    if (root == NULL) {
        TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
        node->val = val;
        node->left = NULL;
        node->right = NULL;
        return node;
    }

    // 如果val比当前根节点小,则递归插入到左子树中
    if (val < root->val) {
        root->left = insertBST(root->left, val);
    } else {  // 否则递归插入到右子树中
        root->right = insertBST(root->right, val);
    }
    return root;
}

// 删除值为val的节点,返回删除后的根节点
TreeNode* deleteBST(TreeNode* root, int val) {
    // 如果当前节点为空,则说明没有找到需要删除的节点,直接返回原根节点
    if (root == NULL) {
        return root;
    }

    // 如果需要删除的节点比当前根节点小,则递归删除左子树中的对应节点
    if (val < root->val) {
        root->left = deleteBST(root->left, val);
        return root;
    } else if (val > root->val) {  // 否则递归删除右子树中的对应节点
        root->right = deleteBST(root->right, val);
        return root;
    }

    // 找到需要删除的节点
    if (root->left == NULL) {  // 情况1:只有右子树
        TreeNode* right = root->right;
        free(root);
        return right;
    } else if (root->right == NULL) {  // 情况2:只有左子树
        TreeNode* left = root->left;
        free(root);
        return left;
    } else {  // 情况3:同时存在左右子树,选择用其前驱节点进行替代
        TreeNode* pred = root->left;
        while (pred->right != NULL) {
            pred = pred->right;
        }
        root->val = pred->val;
        root->left = deleteBST(root->left, pred->val);
        return root;
    }
}

// 中序遍历二叉排序树,输出结果为有序序列
void inorder(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    inorder(root->left);
    printf("%d ", root->val);
    inorder(root->right);
}

int main() {
    // 构建二叉排序树
    TreeNode* root = NULL;
    root = insertBST(root, 5);
    insertBST(root, 3);
    insertBST(root, 7);
    insertBST(root, 2);
    insertBST(root, 4);
    insertBST(root, 6);

    // 查找操作
    printf("%d\n", searchBST(root, 4));  // 输出1
    printf("%d\n", searchBST(root, 8));  // 输出0

    // 删除操作
    root = deleteBST(root, 5);
    inorder(root);  // 输出有序序列:2 3 4 6 7

    return 0;
}

回顾重点,其主要内容整理成如下内容: 

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

平衡二叉树

平衡二叉树也称为AVL树,是一种二叉排序树,它的左子树和右子树的高度差不超过1,即每个节点的左右子树的高度之差的绝对值都不超过1。

主要目的:在于保证二叉搜索树的查找效率。在普通的二叉搜索树中,如果出现极端情况(如数据有序插入),树高会退化为O(n),此时二叉搜索树的效率就与链表一样了。而平衡二叉树的高度始终保持在O(log n)级别,因此在大量动态插入和删除的数据操作时,平衡二叉树有着明显的优势。

结点的平衡因子 = 左子树高 - 右子树高。(结点的平衡因子的值只可能是 -1、0 或 1)

注意:只要有任一结点的平衡因子绝对值大于1,就不是平衡二叉树。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

平衡二叉树的插入:每次调整的对象都是 “最小不平衡子树” , 在插入操作中只要将最小不平衡子树调整平衡,则其他祖先结点都会恢复平衡。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

调整最小不平衡子树(LL)

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

调整最小不平衡子树(RR)

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

上面的两个代码思路大致如下:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

调整最小不平衡子树(LR):  

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

调整最小不平衡子树(RL):   

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

总结:  

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

练习

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

回顾重点,其主要内容整理成如下内容:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

平衡二叉树的删除: 平衡二叉树的删除和插入操作有异曲同工之妙,其主要特点如下:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

平衡二叉树的删除操作具体步骤:

1)删除结点(方法同 “二叉排序树”)

2)一路向北(上 )找到最小不平衡子树,找不到就完结撒花

3)找最小不平衡子树下,“个头”最高的儿子、孙子

4)根据孙子的位置,调整平衡(LL/RR/LR/RL)

5)如果不平衡向上传导,继续2操作

具体的操作如下:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

对最小不平衡子树的旋转可能导致树变矮,从而导致上层祖先不平衡(不平衡向上传递):

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

回顾重点,其主要内容整理成如下内容: 

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

红黑树的基本操作

红黑树(Red-Black Tree)是一种自平衡二叉查找树,它在每个节点上增加了一个存储位表示节点的颜色,可以是红色或黑色。这个额外的颜色信息使得红黑树相较于普通的二叉查找树更加平衡,从而能够确保最坏情况下基本动态集合操作的时间复杂度为O(log n)。

平衡二叉树和红黑树的特点及其适用场景

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

红黑树具有以下五个性质: 

1)每个节点不是红色就是黑色。

2)根节点是黑色的。

3)每个叶子节点都是黑色的空节点(NIL节点)。

4)如果一个节点是红色的,则它的两个子节点都是黑色的。

5)对每个节点,从该节点到其所有后代叶子节点简单路径上,均包含相同数目的黑色节点。

将所有特性总结为的几句话:左根右、根叶黑、不红红、黑路同。

注意:1)从根结点到叶节点的最长路径不大于最短路径的2倍

           2)从n个内部节点的红黑树高度  数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

           3)红黑树查找操作时间复杂度 =

下面是一个简单的红黑树的实例:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

结点的黑高bh:从某结点出发(不含该结点)到达任一空叶结点的路径上黑结点总数。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

回顾重点,其主要内容整理成如下内容: 

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

红黑树的删除操作

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

B树

B树:又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一颗m阶B树或为空树,或为满足如下特性的m叉树:

1)树中每个结点至多有m棵子树,即至多含有m-1个关键字。

2)若根结点不是终端结点,则至少有两棵子树。

3)除根结点外的所有非叶结点至少有[m/2]棵子树,即至少含有[m/2]-1个关键字。

4)所有的叶结点都出现在同一层次上,并且不带信息(可以视为外部结点或类似于折半查找找判定树的查找失败结点,实际上这些结点不存在,指向这些结点的指针为空)。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

B树的高度:一般求解含n个关键字的m阶B树,最小高度和最大高度是多少?(不包含叶子结点)

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

B树的插入

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

B树的删除: 若被删除关键字在非终端结点,则用直接前驱或直接后继来替代被删除的关键字。

直接前驱:当前关键字左侧指针所指子树下的 “最右下” 的元素。

直接后继:当前关键字右侧指针所指子树中的 “最坐下” 的元素。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

回顾重点,其主要内容整理成如下内容: 

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

B+树的相关概念

B+树是一种变种的B树,也是一种自平衡的搜索树。一棵m阶的B+树满足下列条件:

1)每个分支结点最多有m棵子树(孩子结点)。

2)非叶根结点至少有两棵子树,其他每个分支结点至少有[m/2] 棵子树。

3)结点的子树个数与关键字个数相等

4)所有叶结点包含全部关键字及指向相应记录的指针,叶节点中将关键字按大小顺序排列,并且相邻叶结点按大小顺序相互链接起来。

5)所有分支结点中仅包含它的各个子节点中关键字的最大值及指向其子节点的指针。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

B+树的查找:无论查找成功与否,最终一定都要走到最下面一层结点。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

哈希(散列)表基本操作

哈希表又称散列表,是一种数据结构,特点是:数据元素的关键字与其存储地址直接相关。

举出以下一个例子进行简单的说明:

拉链法(又称链接法、链地址法)处理“冲突”:把所有“同义词”存储在一个链表中。

若不同的关键字通过散列函数映射到同一个值,则称它们为 “同义词”;

通过散列函数确定的位置已经存放了其他元素,则称这种情况为 “冲突”。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

散列查找: 我们可以通过散列函数计算目标元素存储地址,然后遍历该地址来找到我们的目标

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

如果查找失败的情况下,比如如下的这俩种情况:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

平均查找长度:如果想求解平均查找长度的话可以采用如下方式进行:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

装填因子:装填因子越大表明冲突越大,查找效率越低。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

常见散列函数的设计方法:(设计目标:让不同关键字的冲突尽可能的减少)

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

散列表处理冲突的方法: 

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

开放定址法有以下三种方式进行:

线性探测法:如果当前的位置冲突,往后面找有空位的地方然后进入即可。

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

如果想进行查找的话也可以采用如下的方式:(分别是成功和失败的情况)

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

查找效率分析的话如下:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

平方探测法:根据d给出的公式依次带入找到对应的值

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

伪序列随机法:根据提供的d值进行存放:

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

总结

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

再散列法

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树

回顾重点,其主要内容整理成如下内容: 

数据结构--》掌握数据结构中的查找算法,算法设计与分析,数据结构,算法,查找,二叉排序树,红黑树文章来源地址https://www.toymoban.com/news/detail-717333.html

到了这里,关于数据结构--》掌握数据结构中的查找算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构--6.3查找算法(静态、动态)(插值查找)

    静态查找:数据集合稳定,不需要添加,删除元素的查找操作。 动态查找:数据集合在查找的过程中需要同时添加或删除元素的查找操作。 对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们在对进行排序,则可以使用折

    2024年02月09日
    浏览(42)
  • 数据结构与算法:树形查找

    左子树结点值 根结点值 右子树结点值 对二叉排序树进行中序遍历,可以得到一个递增的有序数列 原理: 对于一个给定的二叉排序树,如果要查找一个节点,可以按照以下步骤进行: 从根节点开始比较。 如果要查找的值等于当前节点的值,则找到了目标节点,返回该节点。

    2024年02月06日
    浏览(43)
  • 数据结构与算法之查找: 顺序查找 (Javascript版)

    顺序查找 思路 遍历数组 找到跟目标值相等元素,就返回它的下标 没有找到,返回-1 算法实现 总结 非常低效,算是入门搜索 时间复杂度:O(n) 对于数组结构或链表结构而言,没什么太多可说的

    2024年02月05日
    浏览(49)
  • 数据结构,查找算法(二分,分块,哈希)

    一、查找算法         1、二分查找:(前提条件: 必须有序的序列) 2、分块查找:(块间有序,块内无序)     索引表  +  源数据表     思路:     (1)先在索引表中确定在哪一块中     (2)再遍历这一块进行查找 //索引表 typedef  struct  {     int max; //块中最大值

    2024年02月11日
    浏览(59)
  • 【数据结构与算法】查找(Search)【详解】

    【知识框架】 查找(Searching) :就是根据给定的某个值,在查找表中确定一个其等于给定值的数据元素( 或记录)。 查找表(Search Table) :是由同一类型的数据元素(或记录)构成的集合。 (Key):数据元素中唯一标识该元素的某个数据项的值,使用基于的查找,查

    2024年02月02日
    浏览(49)
  • 有哪些数据结构与算法是程序员必须要掌握的?——“数据结构与算法”

    作为IT程序员,学习算法的原因主要有以下几点: 提升问题解决能力:算法可以帮助程序员分析、优化和解决复杂问题。了解算法原理和实现方式将有助于程序员更快地找到合适的解决方案。这对于解决实际工作中的问题是非常有帮助的。 提高代码效率:通过学习不同的算法

    2024年02月13日
    浏览(35)
  • 数据结构实验报告(四)——查找和排序算法

    1. 掌握顺序查找技术和拆半查找技术以及部分排序算法的设计思想; 2. 掌握查找、部分排序算法的实现与执行过程。 查找算法 1.顺序查找: 从数组第一个元素开始逐个比较,找到后返回相应下标。 2.折半查找: 从数组中间开始比较,如果需查找值比中间值大,则在中间值右

    2024年02月07日
    浏览(44)
  • 数据结构和算法之二分法查找

    二分法查找,也称作 二分查找 或 折半查找 ,是一种在有序数组中快速查找特定元素的算法。它采用分治法思想,通过将问题划分为规模更小的子问题,并且通过对子问题的查找来解决原问题。 二分法查找的思路是不断地将数组一分为二,然后判断目标值在哪一部分,进而

    2024年02月09日
    浏览(47)
  • 【数据结构与算法】python实现二分查找

    二分查找 又称折半查找,它是一种效率较高的查找方法 原理:首先,假设表中元素是按升序排列,将表中间位置记录的与查找比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的大于查找,则

    2024年02月05日
    浏览(40)
  • 头歌(C语言)-数据结构与算法-查找-第1关:实现折半查找

    任务描述 相关知识 编程要求 测试说明 任务描述 本关要求通过补全函数 BSL_FindKey 来实现在已排序的顺序表中查找关键码值为 key 的结点并返回该结点的编号。 相关知识 折半查找通常是针对顺序存储的线性表,线性表的结点按关键码从小到大排序,后面称之为折半查找的顺序

    2024年02月10日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包