![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
周雄雄
这个作者很懒,什么都没留下…
展开
-
快速排序与随机快排
对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为Θ(n^2) 的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能很好:它的期望时间复杂度是Θ(n lgn),而且Θ(n lgn)中隐含的常熟因子非常小。另外,它还能够进行原址排序,甚至在虚存环境中也能很好的工作。快速排序的描述与归并排序一样,快速排序也使用了分治思想。下面是对一个典...原创 2019-11-20 12:20:49 · 355 阅读 · 0 评论 -
优先队列
提示: 这节博客是在堆排序基础上延伸的,所以在阅读之前请先看一下堆排序相关知识。也可以看我写的堆排序博客堆排序是一个优秀的算法,但是在实际应用中,将要介绍的快速排序性能一般会优于堆排序。尽管如此,堆这一数据结构仍然有很多应用。今天这个博客将要介绍堆的一个常见的应用:作为高效的优先队列。和堆一样,优先队列也有两种形式:最大优先队列和最小优先队列。这里我们关注与如何基于最大堆实现最大优先队列。优...原创 2019-11-20 09:03:24 · 138 阅读 · 0 评论 -
堆排序
堆排序(heapsort)。与归并排序一样,但不同于插入排序的是,堆排序的时间复杂度是O(n lgn)。而与插入排序相同,但不同于归并排序的是,堆排序同样具有空间原址性:任何时候只需要常数个额外的元素空间存储临时数据。因此,堆排序是集合了我们目前已经讨论的两种排序算法优点的一种排序算法。堆排序引入了另一种算法设计技巧:使用一种我们称为“堆”的数据结构来进行信息管理。堆不仅用在堆排序中,而且它也可...原创 2019-11-19 09:34:50 · 157 阅读 · 0 评论 -
基于分治策略--求解最大子数组问题
分治策略回忆一下,在归并排序中,我们谈到了分治策略。那什么是分值策略?在分治策略中,我们递归地求解一个问题,在每层递归中应用如下三个步骤:分解(Divide) 步骤将问题分为一些子问题,子问题的形式与原问题一样,只是规模更小。解决(Conquer) 步骤递归地求解出子问题。如果子问题的规模足够小,则停止递归,直接求解。合并(Combine) 步骤将子问题的解组合成原问题的解。当子问...原创 2019-11-18 15:20:56 · 470 阅读 · 0 评论 -
归并排序
许多有用的算法在结构上是递归的: 为了解决一个给定的问题,算法一次或多次递归的调用自身以解决紧密相关的若干子问题。这些算法典型地遵循分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归的求解这些子问题。然后再合并这些子问题的解来建立原问题的解。分治模式在每层递归时都有三个步骤:分解 原问题为若干子问题,这些子问题是原问题的规模较小的实例。解决 这些子问题,递归地求解各子问...原创 2019-11-17 20:38:07 · 108 阅读 · 0 评论 -
插入排序
对于少量元素的排序,插入排序是一个有效的算法,插入排序的工作方式就像许多人排序一手扑克牌,开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右将它与已在手中的每张牌进行比较。最终,拿在左手上的牌都是排序好的,原来这些牌是桌子上牌堆中顶部的牌。对于插入排序,我们将其伪代码过程命名为 INSERTION-SORT...原创 2019-11-16 13:41:14 · 83 阅读 · 0 评论