数据结构顺序查找算法代码(数据结构与算法)
数据结构顺序查找算法代码(数据结构与算法)首先我们先来看下顺序查找的基本思想,其方法主要分为以下两步了解了基本概念,我们下面一起看下查找算法的具体实现吧。查找的方法大致分为顺序查找,二分查找,索引查找,哈希查找我们在查找算法的运用过程中,主要有以下几个基本的操作。查找过程中,往往是依据数据元素的某个数据项进行查找,这个数据项通常是数据的关键字。
我们在大多数编写代码的时候,经常会遇到查找匹配的问题,例如在一串字符中查找某个字符出现的次数,或者将某个字符插入到字符串的特定位置等等。
查找类的算法是我们很常用的,本篇内容我们就来讲解一下查找的概念及相关操作,文中会列举具体的实例代码,供大家理解学习。
查找的基本概念首先我们先来看一下查找的具体概念,查找首先要有一个查找表,我们在这个表中用相应的方法查找我们想要的数据。
查找表是由同类型的数据元素(或记录)构成的集合。
查找的方法大致分为顺序查找,二分查找,索引查找,哈希查找
我们在查找算法的运用过程中,主要有以下几个基本的操作。
- 查询某个数据元素是否在查找表中;
- 检索某个数据元素的各种属性;
- 在查找表中插入一个数据元素;
- 从查找表中删去某个数据元素。
查找过程中,往往是依据数据元素的某个数据项进行查找,这个数据项通常是数据的关键字。
了解了基本概念,我们下面一起看下查找算法的具体实现吧。
顺序查找首先我们先来看下顺序查找的基本思想,其方法主要分为以下两步
- 从表中指定位置的记录开始,沿某个方向将记录的关键字与给定值相比较,若某个记录的关键字和给定值相等,则查找成功;
- 反之,若找完整个顺序表,都没有与给定关键字值相等的记录,则此顺序表中没有满足查找条件的记录,查找失败
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的值。
如下图所示
查找算法的基本运算是给定值与顺序表中记录关键字值的比较。
最好情况: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,则称顺序表为有序表 。
二分查找的具体步骤也很简单,概括起来就是将待查关键字与有序表中间位置的记录进行比较,若相等,查找成功。
- 若小于,则只可能在有序表的前半部分。
- 若大于则只可能在有序表的后半部分。
因此,经过一次比较,就将查找范围缩小一半,这样一直进行下去直到找到所需记录或记录不在查找表中。
如上图所示;
- 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行,退出循环。
本篇内容到此解锁,后续的索引查找和哈希查找我们下篇文章继续分析。