摘要: 堆排序是利用最大堆的性质将堆顶元素与数组末尾元素互换,然后重新将剩下的HeapSize-1部分的数组维护为最大堆的过程。 首先我们需要知道什么是堆,以及最大堆和最小堆等。 堆是数组,可以被看做是一颗完全二叉树(即任意两个叶子节点的深度相差不超过1且其排列与满二叉树契合),反过来我们也可以说堆是一个完 阅读全文
posted @ 2024-01-09 14:50 realcp1018 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 归并排序和快排都是时间复杂度为n*logn的排序算法,都较好的的利用了分治思想,因此放在一起描述。 上图是我比较喜欢的一副展示归并和快排的示意图,我们可以通过递归来实现上述两个排序算法。 先来说归并排序: 归并排序的本质就是将要排序的数组一层一层的拆分为直到长度为1的单元素数组然后进行逐层归并。 通 阅读全文
posted @ 2024-01-09 14:40 realcp1018 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 这三种排序之所以放到一起说,是因为他们都比较基础,其最差时间复杂度皆为O(n²),空间复杂度皆为O(1)。 最差时间复杂度为O(n²)并不意味着他们就一定比快排、归并等排序算法差,因为时间复杂度只是一个理论相关值,实际排序的耗时和数组规模、数组的有序程度以及 比较/交换次数 都有关系。 鉴于算法较为 阅读全文
posted @ 2024-01-09 14:24 realcp1018 阅读(20) 评论(0) 推荐(0) 编辑