摘要:
#计数排序##1.计数排序原理 前面所涉及的插入排序、归并排序、堆排序、快速排序等算法都具有这样一个性质:**在排序的最终结果中,各元素的次序依赖于它们之间的比较**。因此我们将这类排序都称为**比较排序**。我们现在介绍新的三种排序:计数排序、基数排序和桶排序,这些算法是通过运算而不是比较来确定... 阅读全文
摘要:
#快速排序##1.快速排序原理 快速排序是一种应用很广泛的排序算法,与归并排序类似,快速排序也采用了**分治策略**。对于一个待排序的数组A[p...r]进行快速排序,根据分治思想,可以分为如下三个步骤: - 分解:数组A[p...r]被划分为两个(有可能为空)子数组A[p...q-1]和A... 阅读全文
摘要:
#堆排序##1.什么是堆 (二叉)堆是一个不完全二叉树,即除了最底层之外,该书是完全满的。那么怎样把堆和一个待排序的数组联系起来呢?这就涉及到二叉堆(二叉树)的一些性质: - 性质1:设父亲节点的编号为i,则左孩子的编号为2i,右孩子的编号为2i,即**LeftChild[i] = 2i**... 阅读全文
摘要:
#寻找最大子数组##1.问题描述 给定一个数组A,找到数组A的一个子数组使得该子数组内所有元素的和最大。当然,如果A中的元素恒为正或恒为负,那么A的最大子数组即为A自身或A中最大的负数,这是很简单的情况。但如果A中的元素有正有负,问题就比较复杂。如下面的数组A,其最大子数组应该为{18,20,-7... 阅读全文
摘要:
#归并排序##1.分治法 很多算法在结构上都是递归的,为了解决一个问题,算法一次或多次递归地调用其自身已解决紧密相关的若干子问题。这就是**分治法**的思想。 分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题... 阅读全文
摘要:
#插入排序##1.插入排序原理打算开始学习《算法导论》这本书,就按照章节顺序以插入排序开始吧。为什么要叫插入排序呢,来看下面这张图(就是《算法导论》上的原图),类似于摸牌并将其从大到小排列。每次摸到一张牌后,根据其点数插入到确切位置。这张图表示的是摸到草花7后进行插入的过程。忽略最右边的草花10,相... 阅读全文