今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容。本篇博客主要介绍查找表的顺序查找、折半查找、插值查找以及Fibonacci查找。本篇博客会给出相应查找算法的示意图以及相关代码,并且给出相应的测试用例。当然本篇博客依然会使用面向对象语言Swift来实现相应的Demo,并且会在github上进行相关Demo的分享。
查找在生活中是比较常见的,本篇博客所涉及的这几种查找都是基于线性结构的查找。也就是说我们的查找表是一个线性表,我们要查找某个元素在线性表中的位置。顺序查找就是从头到尾一个个进行比较,直到找到为止,此方法适用于无序的查找表。而折半查找、插值查找以及Fibonacci查找的查找表都是有序的,下方的内容会详细的介绍到。进入今天博客的主题。
一、查找协议的定义
因为本篇博客我们涉及查找表的多种查找方式,而且查找表的数据结构都是线性结构。基于Swift面向对象语言的特征以及面向接口编程的原则,我们先给我们所有的查找方式定义一个协议。本篇博客中所有的查找方式都会遵循这个查找类型,这样便于外部统一调用,也方便我们测试和扩展。
下方这个SearchType协议就是我们所定义的查找协议。下方这个协议虽然比较简单,但是还是比较重要的,协议中定义了本篇博客所涉及的查找方式对外的调用方式。协议中的search()方法就是外部要调用的方法。该函数第一个参数就是要查找的查找表,第二个参数就是要查找的关键字。该函数的返回值就是关键字在查找表中的位置。如果没有找到就会返回0。
二、顺序查找
上面也简单的提了一下,顺序查找表是从头到尾以此进行对比,直到找到我们要查找的元素位置。如果未找到,就返回
