Heap_Sort金老师模板

#include <iostream>
using namespace std;

//根据需求调整大小
#define SIZE 1001
int heap[SIZE];

#define swap(x, y) {x = x + y; y = x - y; x = x - y;}

void fixDown(int heap[], int pos, int size){

    int x = pos;
    if(x > size) return;//exit

    // 选出最大的
    int l = 2 * x;
    int r = l + 1;
    int maxPos = x;
    if(l <= size && heap[maxPos] < heap[l]) maxPos = l;
    if(r <= size && heap[maxPos] < heap[r]) maxPos = r;

    if(maxPos != x){ //如果父节点不是最大的,进行互换,并在新的点上继续fixDown
        swap(heap[x], heap[maxPos]);
        fixDown(heap, maxPos, size);
    }
}

void fixUp(int heap[], int size, int pos){
    int x = pos;
    int p;
    while(x > 1){
        p = x/2;
        if(heap[x] > heap[p]){
            swap(heap[x], heap[p]);
            x = p;
        }else return;
    }
}

void buildHeap(int heap[], int size){
    for(int i = size/2; i >= 1; i--){
        fixDown(heap, i, size);
    }
}

//heapSort前要先build heap
void heapSort(int heap[], int size){
    int oriSize = size;
    for(int i = 0; i < oriSize - 1; i++){ //注意不要把oriSize和size混在一起
        //互换堆顶和最后一个元素,将堆顶元素放在数组最后面
        swap(heap[size], heap[1]);
        size--;
        fixDown(heap, 1, size);
    }
}

int main(){
    int size = 7;
    for(int i = 1; i <= size; i++) heap[i] = 8 - i;
    buildHeap(heap, size);
    heap[size + 1] = 8;
    size++;
    fixUp(heap, size, size);
    heapSort(heap, size);
}

POJ3481

时间: 2024-10-29 19:06:48

Heap_Sort金老师模板的相关文章

Heap_sort(沙老师版本)

#include<stdio.h> #include<stdlib.h> typedef struct node { int id; int pri; struct node *left; struct node *right; struct node *parent; }heapDataType; typedef struct { bool s[20]; int top; }stackType; class myHeap { private: heapDataType *heap

金老师语录摘要(二)

21. 快乐是天赋的权利,不要等到成功的最后一课才感受属于自己的快乐 22. 房子盖的好不好看地基,球打得好不好看基本动作,要成功必须从最基本处着手 23. 内在信心有多大,外在能力有多强,信心支配一切 24. 用幸福换来的钱,难换回幸福 25. 生活中只有两种行为:要么努力地表现,要么不停辩解(行动的表现 > 辩解) 26. 投诉是顾客给你的一次机会 27. 人性一:人要的不是便宜而是占便宜 28. 人性二:人的贪婪永无止境 29. 人性三:人往往相信表象,而不追求内涵 30. 人性四:诚信不

金老师语录摘要(四)

61 先学会闭嘴,然后再练沉住气 62 敢于做决断,然后准备好承担后果 63 征服一个人最有效,最稳健的策略是:变成他习惯的一部分 64 不要总是估量估量自己在别人心中的地位,活在别人的眼神里就等于失去了自我. 65 学会说“不”,人生从此迈大步 66 用最好的想象力想象最完美的自己,然后采取行动创造最伟大的自己 67 伟大的人不是为了自己的理想高尚地死去,而是为了自己的理想卑微的活着 68 生活简单就迷人,人心简单就幸福,学会简单其实不简单 69 敢于做常人不愿做的事,不敢做的事,做不到的事

面向对象程序设计概述(金老师第一讲)

EnvironmentSetUp windows的版本(内存和硬盘)+安装断点续传软件( 飞讯,可以暂停后继续下载)+虚拟光驱软件(DAEMON Tools读取下载的.ISO 光盘映像文件) CSharp and DotNet C# 编程语言,作者:Anders Hejlsberg, .NET 微软开发的面向对象的软件开发和运行平台,.NET 的核心技术为.NET Framework =Common Language Runtime (运行环境)+基类库 在Windows Vista 之后,Wi

C#结构化编程基础(金老师编程课第二讲)

变量(variable )和数据类型(DataType) 变量就是一块内存地址的别名(利用变量名找到对应的一块虚拟内存),不直接使用内存地址的编码,因为不同的计算机硬件或者计算机操作系统存取数据的方式不同. 声明变量即为开设一个虚拟内存:变量的赋值即为变量对应的内存写入数据,变量之间的赋值即为数据的赋值,再存储. 把变量看做容器,int value =100:int类型的变量,变量名为value:变量生活在内存中,内存=内存单元+内存地址:汇编语言,可以利用内存地址找到内存单元取存数据,但受硬件

雾霾停课期间一位老师写给学生的信

市教委关于教育系统启动Ⅰ级(红色)重污染天气应急响应的通知 根据市政府关于调整重污染天气应急响应的通知,自12月23日零时起至24日6时,将预警等级由Ⅱ级(橙色)调整为Ⅰ级(红色).按照<市教委关于印发天津市教育系统重污染天气应急预案的通知>(津教委[2015]100号)的要求,通知如下: 一.23日中小学校和幼儿园停课一天,同时高校停止室外体育课.课外体育活动.业余训练,停止露天体育比赛活动. 二.做好因未接到停课通知到校中小学学生和到园儿童的看护工作,并加强对寄宿学生的看护,采取一切必要的

吸金胜手:非农双向挂单之全胜交易战法

如何在非农之中百战百胜,怎么才能把握非农这波捡钱的行情,相信这些是大多数投资者梦寐以求的东西,下文吸金胜手老师薇芯xjss55给你分享一下吸金老师从业多年非农挂单的实战总结,供广大投资者参考分享! 先来说说啥是非农,为什么会引起这么大的波动. 非农业就业人数(Changes in non-farm payrolls):为就业报告中的一个项目,该项目主要统计从事农业生产以外的职位变化情形,该数据与失业率一同公布.由美国劳工部统计局在月第一个星期五美国东部时间8:30也就是北京时间20:30(冬令时

浪叫兽的自我介绍 (完整版) 讲述一段如何进入大数据行业

大家好,我是智浪淘沙,在大数据比赛的圈子里大家喜欢称呼我为浪叫兽. 我先做一个简单的且不如意的人生轨迹介绍把,出生农村的我,对自己的才智一直是很自信的.可能是由于自己的天性,不会表达自己加不会按部就班的喜欢上学习,我小学和初中都默默无闻,成绩也不怎么理想,但是始终好着面子,依然是觉得自己很聪明,自己以后能干些大事.而时常被考分的现实所打击.进入高中后,人开始长高了,人也帅气了一点点,玩心也大了,学了学校的美术,音乐,播音主持,体育的专业课,其中美术可能是一个星期,播音主持半学期,音乐半学期,体育

阅博文心得

兴趣是基础. 在老师推荐的几篇博文里还有几个名人中,在我开始看的时候,觉得金旭亮老师的印象最深刻,一开始刚点进去的时候,有个很醒目的英文标题,让人觉得比较幽默,不死板,让人有想要看下去的念头. 他有讲到对于一个初学者来说,学习编程都要有兴趣为基础,对于男生来说更有优势,兴趣虽然可以逐步培养,但是对于大学生来说,也要想去培养这方面兴趣的念头啊,如若没有,又怎么开始自己的编程之旅. 老师又说到,很多学生对于编程,都是一知半解.有很多人都觉得编程很难,对我来说更是难,或许是我兴趣还没有培养到点上,可是