CLRS:build_max_heap(strorage in array)

//用满二叉树存储,从n/2处开始递归向上调整(n/2后均为叶子节点,无需调整)使得根最大

//满二叉树顺序存储,左子2i,右子2i+1;

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ARRAY_SIZE 1000
#define RANDOM_SIZE 100
int buf [ARRAY_SIZE];
int n;
max_heap(int x)
{
int l=2*x,r=l+1,large=x;
if(l<=n&&buf[l]>buf[x])large=l;
if(r<=n&&buf[r]>buf[x])large=r;
if(large!=x)
{
int tmp=buf[large];buf[large]=buf[x];buf[x]=tmp;
max_heap(large);//recurrence adjust
}
}
int main()
{
srand((unsigned int )time(0));
int i;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)buf[i]=rand()%RANDOM_SIZE;
for(i=1;i<=n;i++)printf("%d ",buf[i]);
printf("*\n");
//creat random value of buffer and print
//build_heap
for(i=n/2;i>0;i--)
{
max_heap(i);
}
for(i=1;i<=n;i++)printf("%d ",buf[i]);
}
}

时间: 2024-10-17 02:13:33

CLRS:build_max_heap(strorage in array)的相关文章

[翻译] C++ STL容器参考手册(第一章 &lt;array&gt;)

返回总册 1. std::array (C++11支持) template < class T, size_t N > class array; 数组类 数组容器是固定长度的序列容器:按照严格的线性顺序,存储一定数量的元素. 数组容器内部并不维护除了元素本身之外的任何数据(甚至不保存自己的size,这是一个编译时就确定的模板参数).数组容器对存储空间的利用效率和普通数组一样高.数组类仅仅在数组之外增加了一些成员以及全局函数,使得这些数组能够被当作一个标准容器来使用. 与其他的标准容器不同的是,

在线转换JSON与PHP数组(json php array)

在线转换json与php数组 www.jsonaz.com 例如json数据 { "number" : 1, "tuple" : [1,2,3], "dict" : { "a": "apple", "b": "banana" }, "complex": { "person": { "name" : "

Eigen 3.3.7 数组类(Array)和元素操作

数组类(Array)和元素操作 原文地址:http://eigen.tuxfamily.org/dox/group__TutorialArrayClass.html Array 类有什么用? Array 类提供了一个一般用途的数组,用于操作元素相关算法,就像 Matrix 专门用于实现线性代数算法.更具体一点,Array 提供了对元素进行操作的方法,这些操作大部分与线性代数算法无关.比如数组中每个元素都加一个常量或者两个同维数组对应元素相乘. Array 类型 Array 是一个模板类,和Mat

深入浅出计算机组成原理:32-FPGA、ASIC和TPU(上)-计算机体系结构的黄金时代(第32讲)

一.引子 过去很长一段时间里,大家在讲到高科技.互联网.信息技术的时候,谈的其实都是“软件”.从1995年微软发布Windows 95开始,高科技似乎就等同于软件业和互联网.著名的风险投资基金Andreessen Horowitz的合伙人Marc Andreessen,在2011年发表了一篇博客,声称“Software is Eating the World”.Marc Andreessen,不仅是投资人,更是Netscape的创始人之一.他当时的搭档就是我们在前两讲提过的SGI创始人Jim C

LeetCode 561. Array Partition I(easy难度c++)

题目: Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1, b1), (a2, b2), -, (an, bn) which makes sum of min(ai, bi) for all i from 1 to n as large as possible. Example 1: Input: [1,4,3,2] Output: 4 Expl

Swift入门(五)——数组(Array)

集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,分别是数组(Array)和字典(Dictionary).他们的主要区别在于数组中的元素由下标确定,而字典中的数据的值由数据的键(Key)决定.以下我们认为集合就是数组或字典. 集合的可变性 我们可以定义一个集合常量或者集合变量.一旦定义为常量,就意味着集合的长度.内容和顺序都不能再修改了.比如,定义为常量的数组,不能再向其中添加新的元素. 数组的创建 由于swift中变量的创建遵循" var 变量名:变量类型 "的语法

.net框架-数组(Array)&amp; ArrayList &amp; List

数组(Array)特点: 初始化时规定长度 元素类型相同 数据存储连续,效率高 System.Collections.ArrayList : 初始化时无需规定长度,长度随存储的数据动态扩充与收缩 元素类型可以不相同,其内部使用object[]实现数据存储,因此会数据读写时会频敏装箱.拆箱从而影响效率 继承接口:IList.ICollection.IEnumerable.ICloneable,数据增.删.改查十分方便 System.Collections.Generic.List<T>: 范型类

JS数组(Array)操作汇总

1.去掉重复的数组元素.2.获取一个数组中的重复项.3.求一个字符串的字节长度,一个英文字符占用一个字节,一个中文字符占用两个字节.4.判断一个字符串中出现次数最多的字符,统计这个次数.5.数组排序. 6.快排. 7.删除/添加数组项. 8.数组随机顺序输出. 9.数组求和.最大值. 10.判断是否为数组. 11.冒泡排序. 1.去掉重复的数组元素. Array.prototype.unique = function() { var ret = []; var o = {}; for(var i

java基础知识4--数组的常用方法(Array)

先说一个idea编辑器的问题,编辑器的光标变成黑色光标无法移动,按一下insert键就好了. 数组是线性数据存储结构.它用牺牲自动扩展大小来换取与集合相比的唯一优势--查询效率的提升.本身是一种引用类型的数据.所以我们要使用数组就要首先声明.初始化他.而它的初始化的完成也就意味着此数组的大小将不再改变.而且具有初始值.即定义数组必须给定数组的大小.Java中的数组长度不变!存储的数据类型唯一 数组的引用存放在栈内.实际对象存放在堆内存中. 常用的方法可如下: 1.数组的定义和声明(必须给定数组大