算法导论chapter6 堆排序的代码
按照《算法导论》上的伪代码实现了,刚开始没注意index的问题,导致错误,看来对于伪代码实现C还是要注意下啊!!
#include<iostream>
#include <time.h>
using namespace std;
const int n=11;
void print(int *a)
{
for(int i = 0; i < 11; ++i)
cout << a[i] << " ";
cout << endl;
}
void inline my_swap(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
}
void max_heapify(int *a,int i,int n)
{
int l = 2*i+1,r = l + 1, largest = i;
if(l < n && a[l] > a[i])
largest = l;
if(r < n && a[r] > a[l])
largest = r;
if(largest != i)
{
my_swap(a[largest],a[i]);
max_heapify(a,largest,n);
}
}
void build_max_heap(int *a,int n)
{
for(int i = (n%2==0?n/2-1:n/2); i >= 0; --i)
max_heapify(a,i,n);
}
void heapsort(int *a,int n)
{
build_max_heap(a,n);
cout<<"建立最大堆之后: ";
print(a);
int size=n;
for(int i = n-1; i > 0; --i)
{
my_swap(a[0],a[i]);
--size;
max_heapify(a,0,size);
}
}
int main()
{
srand(time(NULL));
int *a = new int[n];
for(int i=0;i<n;++i)
a[i]=rand();
cout<<"建立最大堆之前: ";
print(a);
heapsort(a,n);
cout<<"最大堆排序之后: ";
print(a);
}
算法导论chapter6 堆排序的代码相关推荐
- 算法导论中C语言代码,算法导论-学习笔记与进度
算法导论 阅读进度 第一部分 基础知识 第一章 计算中算法的角色 Done 1.1 算法 输入与输出 算法可以解决哪些问题 数据结构 技术 一些比较难的问题 1.2 作为一种技术的算法 效率 算法和其 ...
- 算法导论 c语言,算法导论 之 堆排序[C语言]
一.算法实现 堆排序算法的时间复杂度为O(nlgn),其算法实现如下: void heap_sort(int *array, int max) { int idx = 0; build_max_hea ...
- 算法导论6:排序小结和最值取法 2016.1.6
今天想做测试各个排序算法运行时间比较的程序,来对这几天学的排序算法小结一下.所以我先生成了1000000个1~150之间的随机数存到文件里.然后做了一个测试运行时间的程序.想看一下结构.但是结果效果并 ...
- 算法导论 练习12.1
12.1-1 对于关键字集合{1,4,5,10,16,17,21}\{1,4,5,10,16,17,21\}{1,4,5,10,16,17,21},分别画出高度为2.3.4.5和6的二叉搜索树. 这里 ...
- 【算法导论】 内部排序算法总结
排序名称 时间复杂度 空间复杂度 稳定性 直接插入排序 O(n^2) O(1) 稳定 折半插入排序 O(n^2) O(1) 稳定 希尔排序 O(n^2) O(1) 不稳定 冒泡排序 O(n^2) O( ...
- 算法导论中英文版下载
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 算法导论 ...
- Haffman编码(算法导论)
上次算法导论课讲到了Haffman树,笔者惊叹于Haffman编码的压缩效果,故想自己亲自动手尝试写一个极简的Haffman压缩程序. 首先,我们来了解一下什么是Haffman编码 Haffman编码 ...
- 《算法导论》读书笔记(七)
<算法导论>读书笔记之第16章 贪心算法-活动选择问题 前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优 ...
- Python语言程序设计之urllib.request抓取页面,网易公开课之《麻省理工学院公开课:算法导论》
Python语言用urllib.request模块抓取页面非常简单,再将抓取的页面内容用re模块解析,找出自己想要的东西.下面就就此方法来抓取网易公开课之<麻省理工学院公开课:算法导论>, ...
最新文章
- 【React系列】状态(State)和生命周期
- C和C++数组的用法
- a链接的四个伪类顺序
- MATLAB 2018a软件安装教程
- 未来我们对微服务和 Serverless 架构有什么期望
- 计算机图形学基础考试题,计算机图形学基础复习题
- 正式版Android P,喜大普奔!一加6正式推送Android P正式版
- CSS3笔记之基础篇(三)文字与字体
- P7137-[THUPC2021 初赛]切切糕【dp】
- live2d动态壁纸android,Live2d动态壁纸
- 一个安卓锁机病毒的分析报告
- Mac 使用 Aria2 下载百度网盘资源
- 疫情当头,宅家看剧!微信公众号图文应该这样排版
- BTA前瞻 | CyberMiles创始人卢亮:愿拿百万年薪求区块链人才
- 使用Apache OpenNLP探索NLP概念
- ‘vue‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
- 杨建:网站加速--实例分析篇
- 慕课网翁恺老师《面向对象程序设计——Java语言》第一周课程笔记及作业题(设计一个表示分数的Fraction类)
- Win11电脑蓝屏怎么办?Win11电脑蓝屏的修复方法
- 分布式事务之 LCN 框架实现方案的原理、配置与使用