快速排序、归并排序、堆排序三种排序算法的性能谁最好呢?网上查了一下说快速排序最快、其次是归并排序,最差的是堆排序;而理论上三种排序算法的时间复杂度都是O(nlogn),只不过快速排序最差的会达到O(n^2),但是数据的随机性会消除这一影响,今天就来实际比较一下: 1 #include 2 #i...
分类:
编程语言 时间:
2015-03-09 22:06:15
阅读次数:
213
MAX-HEAPIFY(A, i) left =left(i) right=right(i) if(leftA[i]) then largest=left else largest=i if(rightA[largest]) t...
分类:
编程语言 时间:
2015-03-09 12:27:45
阅读次数:
144
选择:1、外循环i,范围N-1,最后一位必为最小。 2、对于N大小,需要N次比较。 3、运行时间和输入的有序无序随机都无关,因为必须遍历 4 、数据移动是最少。 5、优化是堆排序// public static void SelectSort(Compar...
分类:
编程语言 时间:
2015-03-08 22:44:09
阅读次数:
252
TopN算法:从已经存在的数组中,找出最大(或最小)的前n个元素。算法(以找最大的n个元素为例):
1. 取出数组的前n个元素,创建长度为n的小根堆;
2. 从n开始循环数组的剩余元素,如果当前元素比小根堆的根节点大,则将当前元素设置成小根堆的根节点,并通过调整让堆保持小根堆;
3. 循环完成后,小根堆中的所有元素就是需要找的最大的n个元素;
4. 根据需要对小根堆中的所有元素继续利用堆排序...
分类:
编程语言 时间:
2015-03-08 18:52:17
阅读次数:
203
从大到小排序,小根堆。小根堆的筛选算法:void sift(int data[], int k, int m)
{
int i = k ,int j = 2 * k;
while (j <= m) {
if (j data[j + 1]) ++j;
if (data[i] < data[j]) break;...
分类:
编程语言 时间:
2015-03-08 17:18:12
阅读次数:
184
程序员必须知道的一些排序算法,几乎已经成为面试笔试中的固有模式,一个优秀的程序员不仅要会写,还要深入理解其中的原理,设计思想。一些常见的排序算法做一下归纳总结。排序算法的分类:其中,像直接插入排序,二分插入排序,冒泡排序,快速排序,简单选择排序,堆排序等都需要熟练掌握。
分类:
编程语言 时间:
2015-03-08 12:53:59
阅读次数:
200
选择,插入,希尔,归并,快排(包括三向快排),堆排序。 选择: 实现原理:内外循环,选择最小,比较。 关键点:for(k =i+1 ,k 0 && less(a[j],a[j-1],j--) 希尔: 实现原理:插入的改进,使用递增序列0,1,4,13………………,分组插入 ...
分类:
编程语言 时间:
2015-03-08 06:41:30
阅读次数:
182
二叉堆,是一个满二叉树,满足堆的性质。即父节点大于等于子节点(max heap)或者是父节点小于等于子节点(min heap)。二叉堆的如上性质常用于优先队列(priority queue)或是用于堆排序。
由于max heap 与min heap类似,下文只针对min heap进行讨论和实现。
如上图,是根据字母的ASCII码建立的最小堆。
我们用数组对满二叉树采用宽度优先遍历存储...
分类:
编程语言 时间:
2015-03-07 15:41:40
阅读次数:
178
堆排序算法 一、基本思想:是一种属性排序选择方法,在排序过程中,将 R[1...n] 看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序区域中选择关键字最大(或最小)的记录。 二、C 语言代码: 1 /** 2 * 堆排序的关键是...
分类:
编程语言 时间:
2015-03-07 06:13:09
阅读次数:
161
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据非常大,一次不能容纳所有的排序记录,在排序过程中须要訪问外存。我们这里说说八大排序就是内部排序。 当n较大,则应採用时间复杂度为O(nlog2n)的排序方法:高速排序、堆排序或归并排序序。 高速排序:是眼下基于...
分类:
编程语言 时间:
2015-03-06 14:09:30
阅读次数:
207