算法 | 搜索与排序算法


_文{}_\equiv{}_{\nabla \Delta \nabla \Delta \nabla \Delta} {}^{皮}{}_{实}{}^{乐}{}_{观} ^思_考 ^有{}_{人^{生}}{}^{才_{有}}{}_{精^{彩}}
^{\star\star}{}^\equiv{}^{水土七口刀} {}_{生}{}^{活}{}_{阅}{}^{读} ^运_动 _有{}^{兴_{趣}}{}_{才^{有}}{}^{人_{生}}


搜索

定义:

  • 搜索的算法过程就是在一些项的集合中找到一个特定的项。

常见搜索算法

顺序搜索

复杂度:O(n)

  • 对一个长度为N的序列(无序状态下也可认为是元素数量为N的集合),根据每一项的相对位置,从一端作为开始端,一项一项的比对,搜索目标。
  • 缺点:如果列表有序的情况下,从头到尾的搜索会消耗不必要的成本,如果目标不在序列中,必须对每个列表元素进行比对,也就是N次比对。
二分搜索

复杂度:O(log(n))

  • 对于一个长度为N的有序序列(按一定规律排列),从 N/2 的位置对序列进行比对,根据比对情况可以确定搜索目标所处的位置在 N/2 之前或者之后,然后继续与 N/2-N/(22)或 N/2+N/(22) 进行比对,重复这个过程直至搜索完毕。
  • 缺点:必须是有序序列,对序列进行排序的成本是未知的。
散列

复杂度:O(1)

  • 散列是一种数据结构,利用散列可以很快的完成搜索任务。它通过散列函数对其中的元素与其索引产生映射,当搜索一个目标时,使用散列函数对目标进行计算就可以了得到搜索目标的存储位置。
  • 缺点:存在多个元素经过散列函数计算后的索引相同的 冲突 问题。

排序

定义:

  • 很简单,按照一定的规律对集合中的元素进行排列。

排序算法

冒泡排序

复杂度:O(n*n)

  • 冒泡排序是最简单直接的一种方式,对列表进行多次遍历,每次遍历过程中对相邻的两个元素进行比对(若顺序错误则交换位置)。
  • 缺点:因为冒泡排序必须要在最终位置找到之前不断交换数据项,所以它经常被认为是最低效的排序方法。
短路冒泡排序

复杂度:最坏O(n*n)

  • 冒泡排序的改良版,当发现序列已经有序后停止排序。
  • 缺点:对于完全无序的序列与冒泡排序差别不大,且因为需要判断是否有序,需要额外的成本。
选择排序

复杂度:O(n*n)

  • 选择排序每遍历一次列表只交换一次数据,即进行一次遍历时找到最大的项,完成遍历后,再把它换到正确的位置。
  • 缺点:必须进行n-1次比对才能完成排序。
插入排序

复杂度:O(n*n)

  • 插入排序总是保持一个位置靠前的已排好的子表,然后每一个新的数据项被“插入”到前边的子表里,排好的子表增加一项。
  • 缺点:成本受待排列数据影响。
希尔排序

复杂度:O(n)和O(n*n)之间

  • 希尔排序有时又叫做“缩小间隔排序”,它以插入排序为基础,将原来要排序的列表划分为一些子列表,再对每一个子列表执行插入排序,从而实现对插入排序性能的改进。划分子列的特定方法是希尔排序的关键。我们并不是将原始列表分成含有连续元素的子列,而是确定一个划分列表的增量“i”,这个i更准确地说,是划分的间隔。然后把每间隔为i的所有元素选出来组成子列表。
  • 缺点:成本受待排列数据和选取间隔“i”影响。
归并排序

复杂度:O(n log(n))

  • 归并排序是一种递归算法,它持续地将一个列表分成两半。如果列表是空的或者只有一个元素,那么根据定义,它就被排序好了(最基本的情况)。如果列表里的元素超过一个,我们就把列表拆分,然后分别对两个部分调用递归排序。一旦这两个部分被排序好了,那么这种被叫做归并的最基本的操作,就被执行了。归并是这样一个过程:把两个排序好了的列表结合在一起组合成一个单一的,有序的新列表。
  • 缺点:成本受待排列数据影响,归并的过程需要额外存储空间。
快速排序

复杂度:O(n log(n))最坏O(n*n )

  • 快速排序首先选择一个中值。中值的作用在于协助拆分这个列表。中值在最后排序好的列表里的实际位置,我们通常称之为分割点的,将中值存入一个暂存位,两端设置标志位low和high,先是high位置元素与中值对比,如果high位置元素大于中值则high减1,继续比对直至high位置元素小于等于中值,将high位元素赋值给low位元素,然后开始low位置元素与中值对比,low位置元素小于中值则low加1,继续比对直至low位置元素大于中值,将low位元素赋值给high位元素,然后继续用high位元素与中值比对,循环至low和high相遇,然后将中值赋值给相遇的low位置元素,中值是用来把列表变成两个部分来随后分别调用快速排序函数的。
  • 缺点:成本受待排列数据和中值影响。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容