排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。 我不喜欢死记硬背,我更偏向于弄清来龙去脉,理解性地记忆。比如下面这张图,我们将围绕这张图来思考几个问题 ...
分类:
编程语言 时间:
2017-10-11 15:27:46
阅读次数:
214
学习参考:堆排序 Heap Sort、排序六 堆排序 堆结构:一棵完全二叉树。大根堆:K[ i ] < K[ 2i ] 、K[ i ] < K[ 2i+1 ] 。小根堆反之。 本文测试数据:《严奶奶数据结构》P281 由于笔者学业繁忙,没有编写使树形结构可视化的代码。各位读者请心中脑补。 堆调整函数 ...
分类:
编程语言 时间:
2017-10-09 14:11:01
阅读次数:
202
排序算法(三):简单选择排序算法-Java实现 简单选择算法是除堆排序的另外一种选择排序算法,其也是一种不稳定的排序算法,平均时间复杂度为O(N2),空间时间复杂度为O(1) 简单选择算法相对比较简单,并且易于理解,具体排序算法思路如下: 实现代码如下: ...
分类:
编程语言 时间:
2017-10-09 09:50:20
阅读次数:
173
排序算法(二):堆排序-Java实现 首先对堆排序有个整体的认识,堆排序是一个不稳定的排序算法,其平均时间复杂度为O(nlogn),空间复杂度O(1)。 那么何为堆排序呢?所谓堆排序是借助于堆的概念来完成的排序算法,其是选择排序中的一种,因此通过选择排序来理解堆排序会更加容易一些 下面我们来看一下堆 ...
分类:
编程语言 时间:
2017-10-09 02:10:42
阅读次数:
241
event 事件是个很不错的线程同步,以及线程通信的机制,在python的许多源代码中都基于event实现了很多的线程安全,支持并发,线程通信的库 对于优先队列的堆实现,请看《python下实现二叉堆以及堆排序》, python的event请看<python lock, semaphore, eve ...
分类:
编程语言 时间:
2017-10-05 13:08:30
阅读次数:
248
package com.zjl.tool.sort; /** * 求前面的最大K个 解决方案:小根堆 (数据量比较大(特别是大到内存不可以容纳)时,偏向于采用堆) * @author 张恩备 * @date 2016-11-25 下午12:15:36 */ public class TopNByHe... ...
分类:
编程语言 时间:
2017-10-02 22:17:37
阅读次数:
211
1.将待排序列以一个完全二叉树存储,设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。 2.第一趟排序,从二叉树的最后一个根节点(有步骤1可知是值为12的节点)开始,调整当前节点所在的堆,使当前节点大于所有子节 ...
分类:
编程语言 时间:
2017-10-02 20:21:32
阅读次数:
292
八大算法原理详解 交换函数:注意要按引用传递,否则无法真正交换两个数的值 1、直接插入算法 2、希尔排序算法【暂缺】 3、直接选择排序算法 4、堆排序算法【暂缺】 5、冒泡排序算法 6、快速排序算法 7、归并排序算法【注意:数组按值传输】 8、基数排序算法【暂缺】 ...
分类:
编程语言 时间:
2017-10-01 17:38:31
阅读次数:
370
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较 ...
分类:
编程语言 时间:
2017-09-30 16:15:57
阅读次数:
223
Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力。 游戏开始前,一头指定的奶牛会在牛棚后面摆N(1 <= N<= 1,000,000)堆干草,每堆有若干捆,并且没有哪两堆中的草一样多。所有草堆排成一条直线,从左到右依次按1..N编号,每堆中草 ...
分类:
其他好文 时间:
2017-09-30 00:33:36
阅读次数:
205