基于比较的三种排序算法:插入排序、合并排序和快排序

"递归法"之后,我们继续探索算法的奥秘。今天,慕寒将引领大家走进"基于比较的排序"的世界,重点介绍三种方法:插入排序、合并排序以及快排序。排序,这一看似简单的操作,实则蕴含着深奥的学问。在数据处理中,它扮演着至关重要的角色,能够使数据按照特定规则有序排列,从而为我们的分析和决策提供有力支持。

011.排序算法综述

插入排序通过逆序遍历数组,将每个元素插入到正确位置,实现有序排列。这种排序方式的基本思想是将一个元素插入到它所属的正确位置。具体来说,就是将数组中的某个元素与前面的元素逐一比较,找到它的合适位置并插入。这个过程需要逆序遍历数组,并与每个元素进行比较和移动,直至找到合适的位置。当然,在实际操作中还需要考虑一些特殊情况,比如数组中只有一个元素时的情况,以及新插入元素与前一个元素大小关系等。

合并和快排序都是基于分治策略的比较排序算法,各有独特的实现方法。接下来,我们还将探讨合并排序和快排序这两种方法。这两种排序算法同样基于比较的思想,但实现方式各有不同。合并排序通过递归分治的方式将大问题拆解为小问题,逐步合并解决;而快排序则利用了分区的思想,通过一个基准值将数组分为两部分,分别进行排序。这些算法各有千秋,在实际应用中可以根据需求选择适合的方法。

通过今天的介绍,希望大家能对"基于比较的排序"有更深入的了解,并能灵活运用这些算法解决实际问题。

022.插入排序的实现细节

2.1 ◆ 插入排序步骤

在插入排序中,插入排序步骤包括逆序比较及元素插入,需要处理数组特殊情形 。具体步骤为:首先,如果 self.oriList 已排序,则直接赋值给 self.sortedList。否则,我们需要初始化一个空列表 sortedList。然后,使用 for 循环遍历 self.oriList 中的每个元素,每次从 oriList 中取出一个元素并与 sortedList 中的元素逐一比较。若取出的元素小于 sortedList 中的所有元素,则将其直接添加到 sortedList 的开头。若取出的元素大于等于 sortedList 中的部分元素,则找到合适的位置插入该元素,以确保 sortedList 仍然保持有序。重复这些步骤,直到 oriList 中的所有元素都被处理完毕。

这一步骤涉及逆序遍历和元素插入,确保每个元素都能找到其正确的位置。

2.2 ◆ 算法复杂度分析

在算法复杂度分析中,插入排序在最佳情况下的复杂度为O(n) ,而在最坏情况下的复杂度为O(n²)。在最好情况下,比如当输入数组已经有序时,我们只需进行一次比较就能确定待插入元素的位置,而耗时主要在于插入后的元素位置调整。而在最坏情况下,即数组是逆向的,每个元素都需要与所有前边的元素进行比较,导致复杂度上升到O(n²)。

033.合并排序的实现细节

3.1 ◆ 分治策略概述

合并排序通过"递归法"或"分治法"实现,其基本思想是在每一步都将问题拆解为小问题,逐层解决后再逐步合并。这种方法能有效提高处理大型数据集时的效率,因为它充分利用了递归和分治的思想来优化排序过程。

3.2 ◆ 合并排序步骤

合并排序的步骤包括分解子数组及有序合并,实现数组的有序排列。具体来说,分解步骤中我们不断地将原始数组一分为二,直到子数组的长度为1。然后,在合并步骤中,我们将这些已排序的子数组逐步合并,以形成最终的有序数组。这种方法确保了从分解到合并的整个过程中,数组始终有序。

相关推荐
Thomas21432 分钟前
spark sort shuffer 和 hash shuffer 图解对比
算法·哈希算法
AbandonForce21 分钟前
简谈线程池
开发语言·c++·算法
智购科技智能售货柜32 分钟前
2026自动售货机商品掉落声学计数方案:从麦克风到频谱识别的工程实践~YH
人工智能·算法
土司大王1 小时前
LeetCode hot100——实现 Trie (前缀树)
java·算法·leetcode
水龙吟啸1 小时前
华为研发岗AI方向9.9机考题复盘&分析
人工智能·python·算法·华为
小七在进步1 小时前
类和对象(一)
java·数据结构·算法
Y_Bk1 小时前
2026 ICPC EC网络预选赛第一场
算法
CarIise1 小时前
C语言字符串基础:从char数组到双指针反转算法
算法
佳児素花痴╮1 小时前
C++速通2
开发语言·c++·算法
麻瓜code1 小时前
【LeetCode】相交链表:双指针法,一次遍历找到交点
算法·leetcode·链表