序本文主要介绍堆排序算法(HeapSort),堆排序像合并排序而不像插入排序,堆排序的运行时间为O(nlgn);像插入排序而不像合并排序,它是一种原地(in place)排序算法。在任何时候,数组中只有常数个元素存储在输入数组以外,这样,堆排序就把插入排序和合并排序的优点结合起来。
堆排序还引入了另外一种算法设计技术,利用某种数据结构(在此算法中为“堆”)来管理算法执行中的信息。堆数据结构不只在堆...
分类:
编程语言 时间:
2015-06-30 21:59:09
阅读次数:
150
排序算法复习大致结束了,主要有以下几种:冒泡排序、选择排序、简单插入排序、希尔排序、归并排序、快速排序、堆排序。
#include
#define MAXSIZE 1000
using namespace std;
class SqList{
public:
SqList():length(0){}
SqList(int length1,int value=0):length(le...
分类:
编程语言 时间:
2015-06-30 10:33:18
阅读次数:
104
堆的定义:1)完全二叉树,2)每个结点的值都大于其左右孩子结点的值。根据堆的定义可知,最大值就是根结点,其次就是根结点左右孩子结点中的一个……
堆排序有两个很重要的过程:1)建堆,2)堆维护。实质上,这两个过程都可以通过一个函数来实现。
void HeapAdjust(SqList* list, int obj, int length)
{
int tmp = lis...
分类:
编程语言 时间:
2015-06-30 08:58:41
阅读次数:
143
1.时间复杂度
时间复杂度为O(n^2)的排序算法:插入排序、冒泡排序、选择排序
时间复杂度为O(nlogn)的排序算法:堆排序、归并排序、快速排序
希尔排序介于这两者之间
2.算法稳定性
稳定的排序算法:插入排序、冒泡排序、归并排序和基数排序
不稳定的排序算法:选择排序、快速排序、希尔排序、堆排序...
分类:
编程语言 时间:
2015-06-30 00:13:26
阅读次数:
149
基本思想堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以看作是对选择排序的改进。
通常堆是通过一维数组来实现的。在起始数组为0的情形中:
父节点i的左子节点在位置(2*i+1);
父节点i的右子节点在位置(2*i+2);
子节点i的父节点在位置floor((i-...
分类:
编程语言 时间:
2015-06-29 13:27:03
阅读次数:
172
我们自己每天使用的电脑能同时运行多个应用程序,没有感觉到卡顿,电脑为每个应用程序的事件分配了一个优先级,移动端的手机也是,通常不管我们是在看电影,发短信只要有电话,电话绝对是优先级最高的。这个时候我们需要一种合理的数据结构删除最大元素和插入元素,我们可以称之为优先队列。实现这种优先队列最合适的数据结...
分类:
编程语言 时间:
2015-06-29 08:42:21
阅读次数:
138
/**堆排序*/
/**顺序表存储*/
#include
#include
#define LT(a,b) ((a)<(b))
using namespace std;
int a[]={9,5,2,1,3,4,6,8,9,10};
int n=5;
void f(int s,int m){
/**使a[s...m]成为一个大顶堆*/
int c = a[s];
for(i...
分类:
编程语言 时间:
2015-06-28 00:08:36
阅读次数:
202
题目链接 题目要求: Sort a linked list inO(nlogn) time using constant space complexity. 满足O(nlogn)时间复杂度的有快排、归并排序、堆排序。在这里采用的是归并排序(空间复杂度O(logn)),具体程序如下: 1 /...
分类:
其他好文 时间:
2015-06-27 19:53:14
阅读次数:
102
最近在复习数据结构,所以想起了之前做的一个最小生成树算法。用Kruskal算法实现的,结合堆排序可以复习回顾数据结构。现在写出来与大家分享。 最小生成树算法思想:书上说的是在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边....
分类:
编程语言 时间:
2015-06-27 16:08:55
阅读次数:
201
上篇文章用的是quicksort方法排序,但是如果用快速排序法对重复率很高的slice排序的时候,时间复杂度会激增,速度相当慢
所以尝试了一下堆排序,实验结果,感觉挺好的.下面是代码,大家可以参考一下,这个是建立的大顶堆.
二叉树的特性:
最后一个非叶子节点 : root = length/2(当length为奇数的时候root向下取整) 在GO语言中的索引位置:root - 1,
...
分类:
编程语言 时间:
2015-06-26 11:10:42
阅读次数:
174