堆排序算法
先看第一个函数HeapAdjust,这个函数功能是在已经是构成堆的二叉树上,如果节点k数据变化了,对节点k进行修正,使之成为一个新的堆二叉树,n为数据长度。
def HeapAdjust(lst,k,n):
while(2*k+1<n):
j=2*k+1
if j+1lst[j+1]:
j=j+1
if...
分类:
编程语言 时间:
2015-04-06 09:01:20
阅读次数:
242
堆排序利用了大根堆的两个特点:
1. 堆顶元素是最大元素;
2. 后一次堆调整可以在前一次的基础上进行;
堆排序利用了数组的一个特点:
1. 快速定位指定索引的元素;
使用了以上的特点使得对无序数组进行排序变得简单而高效。...
分类:
编程语言 时间:
2015-03-21 09:52:38
阅读次数:
218
[算法说明]
堆排序是对简单选择排序的改进
简单选择排序是从n个记录中找出一个最小的记录,需要比较n-1次。但是这样的操作并没有把每一趟的比较结果保存下来,在后一趟的比较中,有许多比较在前一趟已经做过了,但由于前一趟排序时未保存这些比较结果,所以后一趟排序时又重复执行了这些比较操作,因而记录的比较次数较多。
堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆...
分类:
编程语言 时间:
2015-03-12 22:35:02
阅读次数:
206
堆排序算法 一、基本思想:是一种属性排序选择方法,在排序过程中,将 R[1...n] 看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序区域中选择关键字最大(或最小)的记录。 二、C 语言代码: 1 /** 2 * 堆排序的关键是...
分类:
编程语言 时间:
2015-03-07 06:13:09
阅读次数:
161
八大排序算法实现
插入排序算法实现
希尔排序算法实现
选择排序算法实现
冒泡排序算法实现
归并排序算法实现
快速排序算法实现
堆排序算法实现
基数排序算法实现...
分类:
编程语言 时间:
2015-02-15 15:11:43
阅读次数:
154
《算法导论》中堆排序主要将其分为堆的性质、维护堆的性质、建堆、堆排序算法堆的性质:给定一个结点的下标i,很容易计算得到它的父结点、左孩子和右孩子的下标(伪代码):PARENT(i) return i/2LEFT(i) return 2i RIGHT(i) return 2i+...
分类:
编程语言 时间:
2015-01-06 13:19:17
阅读次数:
176
(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。二叉堆可以分为两种形式:最大堆和最小堆。若将记录按从大到小排列,建“小”顶堆。若将记录按从小到大排,建“大”顶堆。说明:在堆排序算法中,我们使用的是最大堆,最小堆通常用于构造优先队列。算法分析:时间复杂度是O(nlogn)。堆排序属于原址排序:...
分类:
编程语言 时间:
2015-01-05 23:09:50
阅读次数:
390
上机代码:
#include
#include
#include
using namespace std;
#define parent(i) (i)/2
#define left(i) 2*(i)
#define right(i) 2*(i)+1
int size;
void heapify(int a[], int i)
{
int l = left(i), r = right...
分类:
编程语言 时间:
2015-01-01 01:33:37
阅读次数:
174
/* date:2014.12.15
堆结构:是一种树结构,准确说为完全二叉树。在这个树中,每个节点对应原始数据的一个记录,且满足一下条件:1.如果按照从小到大的顺序排序,要求非叶节点的数据要大于或等于其左右子节点的数据;2.如果按照从大到小的顺序排序,要求非叶节点的数据要小于或等于其左右子节点的数据。
堆排序思路:基于选择排序的思想,利用堆结构和二叉树的一些性质来完成数据的排序。
流程:1...
分类:
编程语言 时间:
2014-12-15 20:24:47
阅读次数:
226