摘要: 归并排序 【思想】 ·简单地将原始序列划分为两个子序列 ·分别对每个子序列递归排序 ·最后将排好序的子序列合并为一个有序序列,即归并过程 【特点】稳定 空间代价:O(n) 时间代价:O(nlogn) 注: ·尽管归并排序最坏比较次数比快速排序少,但它需要更多地元素移动,因此它在实用中不一定比快速排序 阅读全文
posted @ 2017-03-01 23:35 Strawberry丶 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 各种内排序方法的选择: 1.从时间复杂度选择 对元素个数较多的排序,可以选择快速排序、堆排序、归并排序;元素较少时,可以选择简单的排序方法。 2.从空间复杂度选择 尽量选择空间复杂度为O(1)的排序方法,其次选空间复杂度为O(logn)的快速排序方法,最后才选择空间复杂度为O(n)的二路归并排序方法 阅读全文
posted @ 2017-03-01 21:02 Strawberry丶 阅读(734) 评论(0) 推荐(0) 编辑
摘要: 基数排序 【思想】基数排序属于“分配式排序”,分为高位优先法MSD和低位优先法LSD 低位优先法LSD: ·从最低位k0开始排序 ·对于排好的序列再用次低位k1排序 ·依次重复,直至对最高位kd-1排好序后,整个序列称为有序的 这是一个分、收;分、收;...;分、收的过程 【特点】稳定 空间复杂度: 阅读全文
posted @ 2017-03-01 21:01 Strawberry丶 阅读(441) 评论(0) 推荐(0) 编辑
摘要: 1.直接选择排序 【思想】选出剩下的未排序数据中的最小元素与第i个元素交换 【特点】不稳定 空间代价:O(1) 时间代价:O(n^2) 2.堆排序 【思想】基于最大推来实现,效率更高。堆排序的基本思想是:首先将n个记录按关键码建成堆(初始堆),将堆顶元素与最后一个元素交换,然后将剩余的元素调整成堆. 阅读全文
posted @ 2017-03-01 20:54 Strawberry丶 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 1.冒泡排序 【思想】不停地比较相邻的记录,如果不满足排序要求就交换相邻数据,直到所有的记录都已经排好序 【特点】稳定 空间代价:O(1) 时间代价:O(n^2) -比较次数 -交换次数 ·最少:O(n) ·最少:0 ·最多:O(n^2) ·最多:O(n^2) 2.快速排序 【思想】基于分治法的排序 阅读全文
posted @ 2017-03-01 17:53 Strawberry丶 阅读(1973) 评论(0) 推荐(0) 编辑
摘要: 1.直接插入排序 【思想】利用有序表的插入操作进行排序 有序表的插入:将一个记录插入到已排好序的有序表中,从而得到一个新的有序表 【特点】稳定 空间代价:O(1) 时间代价:O(n^2) 2.折半插入排序 【思想】 ·在插入第i个记录时,前面的记录已经是有序的了 ·可以用二分法查找第i个记录的正确位 阅读全文
posted @ 2017-03-01 16:40 Strawberry丶 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 【思路】BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。下面是在讨论中看到的一份代码,已学习到。 阅读全文
posted @ 2017-03-01 11:55 Strawberry丶 阅读(115) 评论(0) 推荐(0) 编辑