干货篇|10分钟解释常见查找和排序算法

无论使用哪种编程语言,我们都会需要对数据进行查找和排序,从而实现特定的功能与需求。在这这篇文章中,我将试着用最简洁的语言向大家介绍四个查找算法以及六个排序算法的逻辑原理。



线性搜索 (Linear Search)

在线性搜索中,我们从列表中的第一个元素,按顺序逐一检索到列表最后一个元素

最优:目标值位于列表的第一位。最差:目标值位于列表的最后一位。适用于:未排序列表小列表二元搜索 (Binary Search)在二进制搜索中,列表必须按一定顺序排序。我们通过从列表的中间选取值并进行比较来搜索目标值。若不匹配,那么如果目标值小于中间元素,那么后一半将被放弃,否则前一半将被放弃。这个过程将继续下去,直到找到目标值。

最优:目标值位于列表的第一位。

最差:目标值位于列表的最后一位。

适用于:

未排序列表

小列表


二元搜索 (Binary Search)

在二进制搜索中,列表必须按一定顺序排序。我们通过从列表的中间选取值并进行比较来搜索目标值。若不匹配,那么如果目标值小于中间元素,那么后一半将被放弃,否则前一半将被放弃。这个过程将继续下去,直到找到目标值。

最优:目标值在列表中间。

最差:目标值是列表的第一个或者最后一个值。

适用于:

排序列表

大列表

深度优先查找(Depth First Search)

在DFS中,我们选择图、树或数据结构的根,并依次探索每个分支。当一个分支被选中后,那么它就会探索它的所有子分支,然后再换一个分支。

最优:目标值在根节点。

最差:目标值在最后一个分支的子分支的顶端。

适用于:

树形结构非常广。

当目标值位于树的深处时。


宽度优先搜索(Breadth First Search)

在BSF中,与DFS一样,我们选择图、树或数据结构的根节点。在节点之后,我们移动到它的所有相邻节点,然后再移动到下一级,也就是与分支相邻的所有节点。

最优:目标值在根节点。

最差:目标值在最长节点的顶端。

适用于:

层级少。

树型结构很深,且目标值稀有。


插入排序(Insertion Sort)

每次只接受一个输入,并与列表中的前一个元素进行比较,以将选定的元素放在正确的位置。对于第一个元素,它与下一个元素进行比较。它一次又一次地迭代,直到列表中的最后一个元素被放在正确的位置上。在最后一个元素之后,对列表进行排序。

适用于:

列表较小。

列表大部分值已经排好序,只有少部分值没有排序。


选型排序(Selection Sort)

最初,列表被分为两部分,一部分是排序的,在最左边,另一部分是未排序的,在最右边。一个排序列表在最左边,另一个未排序列表在最右边。同样在开始的时候,排序列表是空的,所有的元素都在未排序列表中。然后我们从未排序列表中挑出最小的元素,并将其放入排序列表中。然后排序列表的长度增加,未排序列表的长度减少。这个过程一直持续到未排序列表为空。

适用于:

检查目标列表是否已经排序。

内存较少。


堆排序(Heap Sort)

在堆排序中,输入的值以树上最大的值为根存储到堆内存中。然后将最大的值存储到列表的数组中。这个过程一直持续到堆内存为空,输出的是排序后的数组。

适用于:

大列表。

需要查询最小或较大数值时。


合并排序(Merge Sort)

列表被划分为子列表,每个列表包含一个元素。然后将每个元素与其相邻的元素进行比较,并按照顺序合并到另一个子列表中。这个过程一直持续到每个子列表。现在每个子列表都有2个元素,现在每个子列表都要和邻近的子列表进行比较。每个子列表有2个元素。这个列表按照顺序合并到另一个子列表中。现在每个子列表将有4个元素。这个过程一直持续到只剩下一个子列表,这个子列表将按顺序排列。

适用于:

列表是链表。

列表较大。


快速排序(Quick Sort)

在快速排序中,我们从列表中选取一个元素,称为pivot(大多数情况下,它是列表中的第一个或最后一个元素),然后重新排序,使所有小于pivot值的元素放在pivot值之前,大于pivot值的元素放在pivot值之后。然后我们以这样的方式对数组进行重新排序:所有小于枢轴值的元素放在枢轴值之前,大于枢轴值的元素放在枢轴值之后。

我们在两个子列表中重复这个步骤,即在枢轴值之前和之后。这样一直持续到列表排序为止。

适用于:

列表较小。

列表是数组。


计数排序(Counting Sort)

在接受输入后,计数排序元素在列表中重复的次数。这样就有2个不同的值,一个是元素的值,另一个是计数的值,然后对其进行算术计算,决定每个元素在列表中的位置。然后对其进行算术计算,决定每个元素在列表中的位置。

适用于:

小型数组。

当输入值的范围小于等于要排序的值数时。


--阅读更多文章,请关注我的公众号:未定义变量

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容