算法学习笔记----第二部分:排序和顺序统计量----第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)
二、优先队列
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)
二、优先队列
相关文章推荐
- 算法学习笔记----第二部分:排序和顺序统计量----第6章、堆排序
- 【算法导论】学习笔记——第6章 堆排序
- Atitit 算法之道 attilax著 1. 第二部分(Part II) 排序与顺序统计(Sorting and Order Statistics) 1 2. 第六章 堆排序(Heapsort)
- (2011.09.25)《C++ Primer》第二部分学习笔记汇总——容器与算法
- [学习《算法导论》]第二部分 排序和顺序统计量
- 大数据学习笔记之四十九 推荐算法的主要算法第二部分
- 算法导论学习笔记 第6章 堆排序
- 算法学习导论学习笔记-第6章 堆排序
- 第二部分 排序和顺序统计量 第 6 章 堆排序
- C++学习笔记【第二部分第十章:泛型算法】
- Linux Unix shell 编程指南学习笔记(第二部分)
- 算法学习之排序学习之堆排序和如何建堆
- C++学习笔记【第二部分第八章:IO类】
- 算法导论 第二部分——排序和顺序统计量
- 数据结构学习笔记一:简单排序与查询算法
- 菜鸟潇寒学习C++笔记------第二部分
- 算法精讲学习笔记 排序(一)
- 黑马程序员—Java基础学习笔记之排序算法:选择排序&冒泡排序
- Java基础学习笔记 第二部分 part 1
- 算法学习笔记--排序之选择排序