青训学习笔记(排序)

108 阅读2分钟

插入排序(Insertion Sort):

插入排序是一种简单直观、基于比较的排序算法。它的核心思想是,不断地将未排序的元素插入到已排序的元素中的正确位置,直到排序完成。具体实现时,从第二个元素开始,将其依次与前面的元素比较,找到一个合适的位置插入,然后将后面的元素向后移动,继续插入下一个元素,直到整个序列排序完成。时间复杂度为 O(n^2),是较慢的排序算法。

快速排序(Quick Sort):

快速排序是一种基于比较的排序算法,也是目前应用最广泛的排序算法之一。它的核心思想是采用分治法,将一个序列分成两个子序列,然后对子序列进行排序,最终合并成一个有序序列。具体实现时,选择一个基准值,将比基准值小的元素放在它的左边,比基准值大的元素放在它的右边,然后递归地对左右两个子序列进行快速排序。由于快速排序的递归调用,时间复杂度为 O(nlogn),但是最坏情况下时间复杂度为 O(n^2)。

堆排序(Heap Sort):

堆排序是一种基于比较的排序算法,它利用堆这种数据结构来实现排序。堆是一种特殊的树形结构,具有以下性质:对于每个非根节点 i,它的父节点 (i-1)/2 的值小于等于它的值;对于每个非叶子节点 i,它的左子节点 2i+1 和右子节点 2i+2 的值都大于等于它的值。在堆排序中,我们首先构建一个最大堆,然后不断将堆顶的元素与最后一个元素交换,然后将堆的大小减一,并对堆进行调整,使其满足堆的性质。时间复杂度为 O(nlogn),比快速排序慢一些,但是不会出现最坏情况,因此性能比快速排序更稳定。

区别:

插入排序的时间复杂度最差是 O(n^2),是一种较慢的排序算法;而快速排序和堆排序的时间复杂度分别是 O(nlogn),性能更好。 快速排序采用分治法,堆排序采用堆这种数据结构;而插入排序则没有采用这样的特殊技巧。 快速排序的最坏时间复杂度为 O(n^2),而堆排序没有最坏情况,因此性能更稳定。