堆排序
来源:互联网 发布:算法第四版pdf高清文字 编辑:程序博客网 时间:2024/06/05 00:59
堆排序的主要步骤包括:
1、对要排序的数组建堆,此时堆顶(也就是数组第一个元素)要么最大,要么最小;
2、交换数组第一个和最后一个元素;
3、数组长度减1;
4、保持最大堆或最小堆的特性;
5、重复2、3、4,直至数组长度为1,结束。
代码如下:
#include <iostream>using namespace std;// 保持最大堆函数void MaxHeapify(int A[], int size, int i){int max = i;// max标识当前节点、其左子节点、其右子节点中内容最大的一个节点下标int left = 2*i + 1;// 左子节点int right = 2*i + 2;// 右子节点if (left < size && A[left] > A[i]){max = left;}if (right < size && A[right] > A[max]){max = right;}if (max != i){int temp = A[i];A[i] = A[max];A[max] = temp;MaxHeapify(A, size, max);}}void HeapSort(int A[], int size){// 建堆for (int i=size/2-1; i>=0; i--){MaxHeapify(A, size, i);}// 排序,注意:使用最大堆保持函数,最后所得的结果是按从小到大排序的while (size > 1){int temp = A[0];A[0] = A[size-1];A[size-1] = temp;MaxHeapify(A, --size, 0);}}void main(){// 初始化要排序的数组int A[] = {4,1,3,2,16,9,10,14,8,7};// 排序HeapSort(A, sizeof(A)/sizeof(int));// 打印排序结果for (int i=0; i<sizeof(A)/sizeof(int); i++){cout<<A[i]<<" ";}cout<<endl;}
结果如下:
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- JAVA 中两种判断输入的是否是数字的方法
- 三大排序算法(Bubble/Quick/Shell)冒泡、快排、希尔......
- CentOS 5 编译安装 MySQL 5.5.x 新版本
- java, poi 取消科学计数法
- 在vc中通过连接池操作mysql(api方式),附c++访问mysql的封装类
- 堆排序
- Socket编程指南及示例程序
- BT雷人的程序语言(大全)[coolshell]
- lwIP RAW TCP/IP接口
- lwIP(V1.0.0) RAW API函数源码分析3----tcp_listen()函数
- 深入浅出DLL编写教程
- OO设计原则总结
- 本博客的第一篇文章
- lwIP(V1.0.0) RAW API函数源码分析4----tcp_accept()函数