堆排序
2015-11-14 18:09
232 查看
#include "stdafx.h" void MAX_HEAPIFY(int a[], int i, int len) { int l = 2 * i + 1, r = 2 * i + 2; int largest = i; //预设该节点为最大 if (l <= len &&a[l] > a[i]) { largest = l; } if (r <= len &&a[r] > a[largest]) { largest = r; } if (largest != i) { int temp = a[i]; a[i] = a[largest]; a[largest] = temp; MAX_HEAPIFY(a, largest, len); } } void BUILD_MAX_HEAO(int a[], int len) { for (int i = len / 2; i > -1; --i) { MAX_HEAPIFY(a, i, len); //从下往上,保证每个都是最大堆 } } void HEAP_SORT(int a[],int len) { BUILD_MAX_HEAO(a,len); int len2 = len; for (int i = len; i > 0;--i) { int temp = a[0]; a[0] = a[i]; a[i] = temp; --len2; //构建最大堆时排除最后一个节点 MAX_HEAPIFY(a, 0, len2); } } int _tmain(int argc, _TCHAR* argv[]) { int a[] = { 27, 17, 3, 16, 13, 10, 1, 5, 7, 12, 4, 8, 9, 0 }; int len = sizeof(a) / 4 - 1; HEAP_SORT(a, len); for (int i = 0; i < len + 1; ++i) { cout << a[i] << endl; } return 0; }
相关文章推荐
- hdu 2151 Wrom
- IOS 为UILabel和UIImageView添加长按复制功能
- Gym 100796K Profact
- 最大子数组
- java构造函数和静态变量的执行顺序
- Unity Android加密dll
- 一款灵活好用的日历控件Kalendae
- Hadoop Yarn 框架原理及运作机制
- zcmu_1671
- android hal 学习——数据结构整理
- 搭建maven+spring+freemaker+mybatis环境之一
- 在Win7上安装VS2015 RC(候选发布版)失败完美解决方法
- python数据分析之股票实战
- 创建型模式:工厂方法模式(Factory Method)--分析优缺点
- 算法—2.插入排序
- POJ3107--Godfather(树的重心)
- 变长数据项排序
- VS2010远程调试 (2)
- Mybatis 中用# 和 $ 的区别
- python和php的面向对象