堆排序

来源:互联网 发布:西安电子大学网络教育 编辑:程序博客网 时间:2024/06/06 19:11

是一种特殊的队列,是一种优先队列:取出的元素顺序是按照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。
堆的两个特性
结构性:用数组表示的完全二叉树
有序性:任意节点的关键字是其子树所有结点的最大值(或最小值)。分别称为最大堆和最小堆。
优先队列的完全二叉树

这里写图片描述

最大堆

这里写图片描述

最小堆

这里写图片描述

堆排序其实就是对选择排序的改进

算法1

void Heap_Sort( ElementType A[], int N){    BuildHeap(A);    for( i=0; i<N; i++)        TmpA[i] = DeleteMin(A);    for( i=0; i<N; i++)        A[i] = TmpA[i];}

算法2

void Heap_Sort( ElementType A[], int N){    for(i=N/2; i>=0; i--)        precDown(a, i , N);    for(i=N-1; i>0; i--)        {            Swap( &A[0], &A[i]);            PercDown( A, 0, i);        }}
原创粉丝点击