您的位置:首页 > 其它

算法学习笔记----第二部分:排序和顺序统计量----第6章、堆排序

2013-05-05 11:27 465 查看
第二部分概述

1.排序算法

插入排序:i

归并排序:

堆排序:

快速排序:

计数排序:

基数排序:

桶排序:

执行时间复杂度,如下表:

一、堆排序

1.(二叉)堆

A[1...A.length]:存放所有数据

A[1...A.heap_size]:存放堆的有效数据

PARENT(i) = [i/2];LEFT(i) = 2i ;RIGHT(i) = 2i+1

最大堆:A[PARENT(i)]>=A[i]      (堆排序算法中我们使用最大堆,当然也可以用最小堆)

最小堆:A[PARENT(i)]<=A[i]      (可以用来构造优先队列)

MAX-HEAPIFY过程:维护最大堆的性质。

BUILD-MAX-HEAP过程:从无序的数组构造一个最大堆。

HEAPSORT过程:对数组进行原址排序。

MAX-HEAP-INSERT,HEAP-EXTRACT-MAX,HEAP-INCREASE-KEY,HEAP-MAXIMUM:利用堆实现一个优先队列。

2.堆排序的实现

(1)维护最大堆的性质

假设以LEFT(i)和RIGHT(i)为根节点的二叉树已经是最大堆了,则

MAX-HEAPIFY(A,i)

1    l = LEFT(i),r = RIGHT(i)

2    largest = i

3    if l<=A.heap_size and A[l]>A[largest]

4        largest = l

5    if r<=A.heap_size and A[r]>A[largest]

6        largest = r

7    if largest != i

8        exchange A[i] and A[largest]

9        MAX-HEAPIFY(A,largest)

(2)建立最大堆

BUILD-MAX-HEAP(A)

1    A.heap_size = A.length

2    for i=[A.length/2] downto 1

3        MAX-HEAPIFY(A,i)

(3)实现堆排序

HEAPSORT(A)

1    BUILD-MAX-HEAP(A)

2    for i=A.length downto 2

3        exchange A[1] and A[i]

4        A.heap_size -=1

5        MAX-HEAPIFY(A,1)

二、优先队列
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: