//HeapUtil.heapSort(arr)
class HeapUtil
{
public static void swap<T>(IList<T> list, int i, int j)
{
T tmp = list[i];
list[i] = list[j];
list[j] = tmp;
}
public static void adjustUp(IList<int> list, int idx)
{
int n = idx;
while(n != 0)
{
int parent = (n - 1) / 2;
if (list[n] < list[parent])
{
swap(list, n, parent);
n = parent;
}
else
break;
}
}
public static void adjustDown(IList<int> list, int idx)
{
int n = idx;
while (n < list.Count / 2)
{
int lchild = n * 2 + 1;
int smallest = n;
if(list[lchild] < list[smallest])
{
smallest = lchild;
}
int rchild = lchild + 1;
if(rchild < list.Count && list[rchild] < list[smallest])
{
smallest = rchild;
}
if (smallest == n)
break;
else
{
swap(list, smallest, n);
n = smallest;
}
}
}
public static void heapAdd(IList<int> list, int elem)
{
list.Add(elem);
adjustUp(list, list.Count - 1);
}
public static int heapRm(IList<int> list, int idx)
{
swap(list, idx, list.Count - 1);
int res = list[list.Count - 1];
list.RemoveAt(list.Count - 1);
adjustDown(list, idx);
return res;
}
public static void heapMake(IList<int> list)
{
for(int i = list.Count / 2 - 1; i >= 0; i--)
{
adjustDown(list, i);
}
}
public static void heapSort(IList<int> list)
{
heapMake(list);
IList<int> res = new List<int>();
while(list.Count != 0)
{
res.Add(heapRm(list, 0));
}
list.Clear();
foreach(var e in res) list.Add(e);
}
}
近期热议
推荐标签 标签
-
996
13 引用 • 200 回帖 • 2 关注
- B3log
-
FlowUs
1 引用
FlowUs.息流 个人及团队的新一代生产力工具。
让复杂的信息管理更轻松、自由、充满创意。
-
JSON
52 引用 • 190 回帖
JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。
-
Flutter
39 引用 • 92 回帖
Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。
-
FreeMarker
23 引用 • 20 回帖 • 461 关注
FreeMarker 是一款好用且功能强大的 Java 模版引擎。
-
iOS
88 引用 • 139 回帖
iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。
-
Flume
9 引用 • 6 回帖 • 652 关注
Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。
-
Pipe
133 引用 • 1124 回帖 • 115 关注
Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。
这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
-
代码片段
147 引用 • 973 回帖
代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。
用户在该标签下分享代码片段时需在帖子标题前添加
[css]
或[js]
用于区分代码片段类型。 -
工具
298 引用 • 763 回帖
子曰:“工欲善其事,必先利其器。”
-
Ruby
7 引用 • 31 回帖 • 246 关注
Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。
-
尊园地产
1 引用 • 22 回帖 • 786 关注
昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。
-
Netty
49 引用 • 33 回帖 • 35 关注
Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。
-
golang
498 引用 • 1395 回帖 • 249 关注
Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。
-
ReactiveX
1 引用 • 2 回帖 • 183 关注
ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。
-
大数据
93 引用 • 113 回帖 • 2 关注
大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
-
倾城之链
23 引用 • 66 回帖 • 166 关注
-
jsoup
6 引用 • 1 回帖 • 486 关注
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
-
音乐
62 引用 • 512 回帖
你听到信仰的声音了么?
-
坑
69 引用 • 93 回帖
一些有用的避坑指南。
-
小薇
35 引用 • 468 回帖 • 760 关注
小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。
由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!
-
CongSec
1 引用 • 1 回帖 • 29 关注
本标签主要用于分享网络空间安全专业的学习笔记
-
生活
230 引用 • 1454 回帖 • 1 关注
生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。
- Kotlin
-
Node.js
139 引用 • 269 回帖
Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。
-
Sphinx
1 引用 • 224 关注
Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于