本章堆排序内容是《算法导论》教材第二部分《排序与顺序统计量》的第一讲。
堆排序,这是一种O(nlgn)时间的原址排序算法。它使用了一种被称为堆的数据结构,堆还可以用来实现优先级队列。
1、堆的概念
数组R[1...n]中,n个关键字序列k1,k2,…,kn,当且仅当该序列满足如下性质(简称为堆性质,以大根堆为例):
ki >= k(2i)且ki >...
分类:
编程语言 时间:
2016-04-01 18:31:48
阅读次数:
281
排序即将一个无序的数组(序列)按照一定的规则排列,常见的规则便是按照从大到小或者从小到大的顺序。本文讨论的排序一律指按照从小到大的顺序进行排列的这种情况。 本文将分为上下两章介绍以下六种排序算法: (1)直接选择排序 (2)冒泡排序 (3)快速排序 (4)二分排序 (5)堆排序 (6)线性时间排序。 ...
分类:
编程语言 时间:
2016-03-31 23:25:04
阅读次数:
154
正题: 1、快速排序 原理:在初始序列中选择一个参考值,将序列其他数和该值进行对比,小的放一边大的放一边,然后把划分的两数组看成新序列,重新选择参考值,并比较划分。知道每个数组的元素个数为1停止。 代码:第一眼看上去,貌似递归的方式来弄比较好。 2、堆排序 原理:堆排序(Heapsort)是指利用堆 ...
分类:
编程语言 时间:
2016-03-31 21:41:51
阅读次数:
310
排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。 内排序有可以分为以下几类: (1)、插入排序:插入排序、二分法插入排序、希尔排序。 (2)、选择排序:选择排序、堆排序。 (3)、交换排序 ...
分类:
编程语言 时间:
2016-03-31 16:24:41
阅读次数:
213
恢复内容开始 接算法的上一系列,在前几篇博客中,已经分析了 交换算法(冒泡排序,快速排序)、插入算法(直接插入排序,希尔排序),这一系列我们谈谈选择排序。 选择排序分为两种,一种是直接选择排序,一种是堆排序,下面我们看 直接选择排序: 百度百科: 选择排序(Selection sort)是一种简单直 ...
分类:
编程语言 时间:
2016-03-30 00:07:12
阅读次数:
407
"2.h"
#include<iostream>
#include<vector>
#include<assert.h>
usingnamespacestd;
template<classT>
structLess
{
booloperator()(constT&left,constT&right)
{
returnleft<right;
}
};
template<classT>
structGreater
{
b..
分类:
编程语言 时间:
2016-03-29 22:29:56
阅读次数:
501
在我们学习冒泡、选择、堆排序这些的时候,一般都是使用的简单的数组来实现算法,但是在实际中需要对对象进行排序。 以学生为例,通过学生的成绩来对他们进行一个排序 <!--StartFragment --><!--StartFragment --> 主要是需要灵活运用ArrayList里面的set方法,还 ...
分类:
编程语言 时间:
2016-03-29 10:00:16
阅读次数:
154
一个数组可以看成是一棵树。(数组下标0 是根节点 2i+1是节点的左孩子 2i+2是右孩子 ) 这棵树的父亲节点 大于 左右孩子节点 ,称之为大顶堆。 这棵树的父亲节点 小于 左右孩子节点 ,称之为小顶堆。 堆排序 (以大顶堆 为例) 主要分为两个 部分 1>调整节点 2>将无序的数组变成 大顶堆 ...
分类:
编程语言 时间:
2016-03-28 21:52:13
阅读次数:
225
趁空闲时间,我把常用的排序算法实现并总结一下,以便温故知新。以下将提及到直接插入排序、冒泡排序、快速排序、选择排序、堆排序、归并排序。
按类型分,可以分成以下几种:
(1)插入排序:直接插入排序
(2)交换排序:冒泡排序、快速排序
(3)选择排序:选择排序、堆排序
(4)归并排序:归并排序...
分类:
编程语言 时间:
2016-03-28 00:24:28
阅读次数:
176
七个基础排序算法(均为内部排序):
直接插入排序
希尔排序
冒泡排序
简单选择排序
快速排序
堆排序
二路归并排序排序算法稳定性:经过排序后,具有相同关键码的元素之间的相对次序保持不变,则称该排序方法是稳定的;否则不稳定。直接插入排序:void InsertSort(int a[],int n){ // index start at 1, a[0] is temp one
i...
分类:
编程语言 时间:
2016-03-28 00:15:58
阅读次数:
189