算法专题系列:
北大硕士LeetCode算法专题课---算法复杂度介绍_骨灰级收藏家的博客-CSDN博客
北大硕士LeetCode算法专题课-基础算法之排序_骨灰级收藏家的博客-CSDN博客
查找算法
查找算法也可以叫搜索算法。 查找算法就是从一个有序数列中找出一个特定的数,常用千判断某个数是否在数列中, 或者某个数在数列中的位置。
在计算机应用中, 查找是常用的基本运算, 是算法的重要组成部分。
顺序查找(也被称为线性查找)是最简单、最直接的查找镜法。顾名思义, 顺序查找就是将数列从头到尾按照顺序查找一遍, 是最容易理解的算法。
举例: 我们要从下面数列中找到"1" 这个元素
举例: 我们要从下面数列中找到"1" 这个元素,从 第一个元素开始遍历, 逐一比较
举例: 我们要从下面数列中找到"1" 这个元素,从 第一个元素开始遍历, 逐一比较, 直到找到(或遍历完成)为止
顺序查找代码
二分查找
二分查找(Binary Search)是应用在有序数据中的, 十分高效的查找算法。 如果数据是无序的, 我们先要将数据从小到大排序。其原理是比较待查数据与数组中值的数据的大小, 如果等千中间值则直接返回, 如果大千中间值, 就只在后半部分查找,如果小千中间值, 就在前半部分查找, 如此往复, 直到找到数据, 或剩下一个元素。
二分查找原理
二分查找代码实现
二分查找代码实现
二分查找的时间复杂度是O(logn)
O在n个元素中寻找➔ @在n/2个元素中寻找今@在n/4个元素中寻找……在1个元素中寻找
n经过几次"---;-2 " = 1➔ log2n = O (logn)
二分查找:搜索过程从数组的中间元素开始, 如果中间元素正好是要查找的元素, 则搜索过程结束。
如果某一特定元素大千或者小千中间元素, 则在数组大千或小于中间元素的那一半中查找, 而且跟开始一样从中间元素开始比较。
如果在某一步骤数组为空, 则代表找不到。 这种搜索算法每一次比较都使搜索范围缩小一半。
二分查找的时间复杂度:0 (logn)
插值查找
插值查找(Interpolation Search)是对实例的二分查找的改进, 其应用场景是排序数组中的值是均匀分布的。
二分查找总是到中间元素做左右划分, 而插值搜索会根据正在搜索的Key的大小来确定划分的位置
一
例如, 如果Key更接近最后 个元素, 则插值搜索会从后半部分开始进行数据划分
Mid= L + (R-L) X (target - data[L]) / data[R]-data[L]
插值查找代码
分块查找
分块查找和以上几种查找方式有所不同: 顺序查找的数列是可以无序的; 二分法查找和插入查找的数列必须是有序的;分块查找介千两者之间, 需要块有序, 元素可以无序。
分块查找先按照一定的取值范围将数列分成数块。 块内的元素是可以无序的, 但块必须是有序的。
所谓块有序, 就是处千后面位置的块中的最小元素都要比前面位置块中的最大元素大
分块查找查找过程:
印确定待查记录所在块(顺序或折半查找)@在块内查找(顺序查找)