快捷搜索:  汽车  科技

数据结构顺序查找算法代码(数据结构与算法)

数据结构顺序查找算法代码(数据结构与算法)首先我们先来看下顺序查找的基本思想,其方法主要分为以下两步了解了基本概念,我们下面一起看下查找算法的具体实现吧。查找的方法大致分为顺序查找,二分查找,索引查找,哈希查找我们在查找算法的运用过程中,主要有以下几个基本的操作。查找过程中,往往是依据数据元素的某个数据项进行查找,这个数据项通常是数据的关键字。

我们在大多数编写代码的时候,经常会遇到查找匹配的问题,例如在一串字符中查找某个字符出现的次数,或者将某个字符插入到字符串的特定位置等等。

查找类的算法是我们很常用的,本篇内容我们就来讲解一下查找的概念及相关操作,文中会列举具体的实例代码,供大家理解学习。

查找的基本概念

首先我们先来看一下查找的具体概念,查找首先要有一个查找表,我们在这个表中用相应的方法查找我们想要的数据。

查找表是由同类型的数据元素(或记录)构成的集合。

查找的方法大致分为顺序查找,二分查找,索引查找,哈希查找

我们在查找算法的运用过程中,主要有以下几个基本的操作。

  1. 查询某个数据元素是否在查找表中;
  2. 检索某个数据元素的各种属性;
  3. 在查找表中插入一个数据元素;
  4. 从查找表中删去某个数据元素。

查找过程中,往往是依据数据元素的某个数据项进行查找,这个数据项通常是数据的关键字。

了解了基本概念,我们下面一起看下查找算法的具体实现吧。

顺序查找

首先我们先来看下顺序查找的基本思想,其方法主要分为以下两步

  1. 从表中指定位置的记录开始,沿某个方向将记录的关键字与给定值相比较,若某个记录的关键字和给定值相等,则查找成功;
  2. 反之,若找完整个顺序表,都没有与给定关键字值相等的记录,则此顺序表中没有满足查找条件的记录,查找失败

int seqsearch(DataType R[] KeyType key){ R[0].key=key i=n; while (R[i].key != key && i > 0) i=i-1; return i; }

上面的代码我们从查找表的最后一位R[n]开始向前查找直到找到R[0]才退出,返回i的值。

如下图所示

数据结构顺序查找算法代码(数据结构与算法)(1)

查找算法的基本运算是给定值与顺序表中记录关键字值的比较。

最好情况:O(1)

最坏情况:O(n)

平均情况:O(n)

二分查找

二分查找跟顺序查找不太一样,二分查找的查找表必须是有序表。

R[i].key≤R[i 1].key(R[i].key≥R[i 1].key) i=1 2 … n-1,则称顺序表为有序表 。

数据结构顺序查找算法代码(数据结构与算法)(2)

二分查找的具体步骤也很简单,概括起来就是将待查关键字与有序表中间位置的记录进行比较,若相等,查找成功。

  • 若小于,则只可能在有序表的前半部分。
  • 若大于则只可能在有序表的后半部分。

因此,经过一次比较,就将查找范围缩小一半,这样一直进行下去直到找到所需记录或记录不在查找表中。

数据结构顺序查找算法代码(数据结构与算法)(3)

如上图所示;

  • low 指示查找区间的下界
  • high 指示查找区间的上界
  • mid = (low high)/2

int BinarySearch(DataType SL[] KeyType key int n){ /*在长度为n的有序表SL中折半查找其关键字等于key的记录*/ /*查找成功返回其在有序表中的位置,查找失败否返回0*/ int low=1; int high=n; while(low<=high){ mid=(low high)/2; if(key = = SL[mid].key) { return mid; } else if( key>SL[mid].key) low=mid 1; else high=mid-1; } return 0; }

上面就二分查找的对应代码实现,mid = (low high)/2,同时通过11行到14行来刷新low和high的值。继而继续下一次的判断,直到找到我们想要的值,即第8行,退出循环。

本篇内容到此解锁,后续的索引查找和哈希查找我们下篇文章继续分析。

猜您喜欢: