堆排序
来源:互联网 发布:.bat java 编辑:程序博客网 时间:2024/05/20 07:19
堆排序(Heap Sort)
算法思路:首先将待排序数组构造为大顶堆,大顶堆是一棵完全二叉树,而且每棵子树的根节点都是该子树的最大值。然后将堆顶元素与此时堆的最后一个元素交换,并将堆的规模减一,再构造一个新的大顶堆,循环进行下去直到堆中剩下一个元素为止,此时排序完成。构造大顶堆是通过下滤操作完成的。
堆排序的时间性能上界为O(N*logN)。堆排序是不稳定排序算法。
下面的算法将完全二叉树的每个节点值由上到下,由左到右依次存放在一个数组中。
void Swap( int *a, int *b ){ int Tmp; Tmp = *a; *a = *b; *b = Tmp;} /*对规模为N的堆中的A[i]进行下滤处理*/void PercDown( int A[], int i, int N ){int maxIndex = i;int left = 2 * i + 1;int right = left + 1;if(left < N && A[left] > A[i])maxIndex = left;if(right < N && A[right] > A[maxIndex])maxIndex = right;if(maxIndex != i) {Swap(&A[i], &A[maxIndex]);PercDown(A, maxIndex, N);}} void HeapSort( int A[], int N ){ int i; /*创建大顶堆*/ for(i = N / 2; i >= 0; i-- ){ PercDown(A, i, N ); } /*将堆顶元素与当前堆的最后一个元素交换,并将堆的规模减一, 然后将堆顶元素做下滤处理,产生新的大顶堆*/ for(i = N - 1; i > 0; i--){ Swap(&A[0], &A[i] ); PercDown(A, 0, i ); }}
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- android基础学习(6)-------AlertDialog.Builder提示对话框
- 图像相似度(未测试)--SIFT图形比对的斜率优化方法
- xml和JSON格式相互转换的Java实现
- 什么是CW?CW通讯的优缺点是?
- 穆利堂推荐:软件行业销售指引流程---客户内部分析思路指引
- 堆排序
- BMP文件格式详解(BMP file format)
- 2 Tips for Sizing and Aligning Nodes
- [Android Training视频系列]1.3 Building a Simple User Interface
- MySQL存储过程_游标
- Android 使用SAX读取XML文件
- java解压zip或rar压缩文件(有源码和jar包以及对中文乱码的处理方法)
- myeclipse+tomcat start工程
- (学习记录)如何判断链表是否有环