逖靖寒的世界
Share my world. Share your viewpoint.
博客园
社区
首页
新随笔
联系
管理
订阅
随笔- 104 文章- 13 评论- 877
变治法:用C#实现堆的建立与堆排序
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4
5
namespace
Heap
6
{
7
class
Program
8
{
9
static
void
Main(
string
[] args)
10
{
11
int
len
=
100
;
12
Heap heap
=
new
Heap();
13
14
Random random
=
new
Random();
15
16
for
(
int
i
=
0
; i
<
len; i
++
)
17
{
18
int
data
=
random.Next(
1
,
100000
);
19
heap.Insert(data);
20
}
21
22
for
(
int
i
=
0
; i
<
len; i
++
)
23
{
24
int
data
=
heap.Delete();
25
System.Console.WriteLine(data);
26
}
27
28
System.Console.WriteLine(
"
ok
"
);
29
}
30
}
31
32
class
Heap
33
{
34
private
List
<
int
>
_nodes;
35
36
public
Heap()
37
{
38
_nodes
=
new
List
<
int
>
();
39
}
40
41
public
void
Insert(
int
data)
42
{
43
_nodes.Add(data);
44
45
chechUp(_nodes.Count
-
1
);
46
}
47
48
private
void
chechUp(
int
downIndex)
49
{
50
int
parentIndex;
51
52
while
( (parentIndex
=
getParentIndex(downIndex))
!=
-
1
)
53
{
54
if
(_nodes[downIndex]
>
_nodes[parentIndex])
55
{
56
int
data
=
_nodes[downIndex];
57
_nodes[downIndex]
=
_nodes[parentIndex];
58
_nodes[parentIndex]
=
data;
59
60
downIndex
=
parentIndex;
61
}
62
else
63
{
64
break
;
65
}
66
}
67
}
68
69
public
int
Delete()
70
{
71
if
(_nodes.Count
==
0
)
72
{
73
throw
new
Exception(
"
no more element to delete.
"
);
74
}
75
76
int
data
=
_nodes[
0
];
77
78
_nodes[
0
]
=
_nodes[_nodes.Count
-
1
];
79
80
_nodes.RemoveAt(_nodes.Count
-
1
);
81
82
chechDown(
0
);
83
84
return
data;
85
}
86
87
private
void
chechDown(
int
upIndex)
88
{
89
int
lChildIndex;
90
int
rChildIndex;
91
int
downIndex;
92
93
lChildIndex
=
getLChildIndex(upIndex);
94
rChildIndex
=
getRChildIndex(upIndex);
95
96
while
(lChildIndex
!=
-
1
)
97
{
98
//
只考虑父节点和左子树的关系
99
if
(rChildIndex
==
-
1
)
100
{
101
downIndex
=
lChildIndex;
102
}
103
else
104
{
105
downIndex
=
_nodes[lChildIndex]
>
_nodes[rChildIndex]
?
lChildIndex : rChildIndex;
106
}
107
108
if
(_nodes[upIndex]
<
_nodes[downIndex])
109
{
110
int
data
=
_nodes[downIndex];
111
_nodes[downIndex]
=
_nodes[upIndex];
112
_nodes[upIndex]
=
data;
113
114
upIndex
=
downIndex;
115
116
lChildIndex
=
getLChildIndex(upIndex);
117
rChildIndex
=
getRChildIndex(upIndex);
118
}
119
else
120
{
121
break
;
122
}
123
124
}
125
126
127
}
128
129
private
int
getLChildIndex(
int
parentIndex)
130
{
131
int
lChildIndex
=
parentIndex
*
2
;
132
133
lChildIndex
+=
1
;
134
135
return
lChildIndex
<=
_nodes.Count
-
1
?
lChildIndex :
-
1
;
136
}
137
138
private
int
getRChildIndex(
int
parentIndex)
139
{
140
int
rChildIndex
=
parentIndex
*
2
;
141
142
rChildIndex
+=
2
;
143
144
return
rChildIndex
<=
_nodes.Count
-
1
?
rChildIndex :
-
1
;
145
}
146
147
/**/
///
<summary>
148
///
如果该节点是跟节点,则无法给出其父节点,故以-1代替。
149
///
</summary>
150
///
<param name="childIndex"></param>
151
///
<returns></returns>
152
private
int
getParentIndex(
int
childIndex)
153
{
154
//
如果该节点是跟节点,则无法给出其父节点,故以-1代替。
155
if
(childIndex
==
0
)
156
{
157
return
-
1
;
158
}
159
160
childIndex
++
;
161
162
//
向下取整
163
return
(
int
)(childIndex
/
2
)
-
1
;
164
}
165
}
166
167
class
HeapNode
168
{
169
public
int
_data;
170
public
HeapNode _parent;
171
public
HeapNode _lChild;
172
public
HeapNode _rChild;
173
174
public
HeapNode(
int
data)
175
{
176
_data
=
data;
177
_parent
=
null
;
178
_lChild
=
null
;
179
_rChild
=
null
;
180
}
181
}
182
183
}
184
posted @ 2007-11-24 13:56
逖靖寒
阅读(346)
评论(0)
编辑
收藏
所属分类:
读书
、
算法
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
C#下如何实现服务器+客户端的聊天程序
用C#编写ActiveX控件(一)
相关链接:
所属分类的其他文章:
C#实现遗传算法,模拟花朵的进化。
《Head First HTML with CSS and XHTML》 读后感
动态规划:利用WarShell算法求有向图的传递闭包
时空权衡:利用额外的空间提高字符串匹配的速度
变治法:用C#实现堆的建立与堆排序
如何高效求2个整数的乘积。
如何高效地判断奇数和偶数
编程实现1到N个数的所有排列组合
减治法:C#实现插入排序
分治法:用C#实现快速排序
最新IT新闻:
Mono 2.0 发布 Linux 上的 .NET 框架成熟了吗?
史上九大最强网络黑客
微软拟2010年推新版SQL 强化商业智能功能
GMail Labs 新功能 - 做数学题确认是否发出邮件
OpenOffice四处创造纪录 占有全球25%办公软件市场
公告
我的最新闪存
君子不器
10-3 12:47
<
2007年11月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我管理的小组
Visual Studio
博客园仿真足球交流小组
我参加的小组
ASP.NET
设计模式
软件工程师日语
.NET 新手小组
程序员音乐空间
Debug 探索团队小组
沪江日语电台博客园分站
大连.NET俱乐部
我参与的团队
大连.NET俱乐部(1/805)
Windows Embedded开发(0/98)
Debug 探索团队(0/53)
随笔分类
(147)
.NET 编程(26)
(rss)
Python(4)
(rss)
Silverlight(2)
(rss)
博客园仿真足球竞赛平台(10)
(rss)
读书(17)
(rss)
个人制作(17)
(rss)
简历(1)
(rss)
软件设计(1)
(rss)
生活(35)
(rss)
算法(26)
(rss)
新手教程(2)
(rss)
英语(1)
(rss)
杂九杂十(5)
(rss)
随笔档案
(105)
2008年10月 (3)
2008年9月 (1)
2008年8月 (10)
2008年7月 (1)
2008年6月 (9)
2008年5月 (4)
2008年4月 (2)
2008年3月 (4)
2008年2月 (2)
2008年1月 (6)
2007年12月 (5)
2007年11月 (13)
2007年10月 (5)
2007年9月 (6)
2007年8月 (7)
2007年7月 (2)
2007年6月 (7)
2007年5月 (7)
2007年4月 (7)
2007年3月 (1)
2007年2月 (2)
2007年1月 (1)
文章档案
(12)
2007年5月 (1)
2007年4月 (10)
2007年2月 (1)
相册
My Photo
开源项目
AForge
A C# framework designed for developers and researchers in the fields of Computer Vision and Artificial Intelligence - image processing, neural networks, genetic algorithms, machine learning, etc.
朋友的博客
IT乌吉线
一起参加PH2008的队友
游戏AI
AI Game Dev
非常不错的一个网站,一直在更新。
Game/AI
有关游戏AI的一些评论
最新随笔
1. TopCoder SRM 152 div 2 500point
2. 基于silverlight 1.0的中国象棋游戏
3. 感叹Silverlight中的JavaScript智能感应
4. 了解博客园仿真足球竞赛平台的所有内部运行细节
5. 博客园仿真足球竞赛平台更新信息
6. 仿真足球队的整体的策略简单实现
7. 仿真足球最快截球的设计和实现
8. 深入理解整个比赛的执行流程
9. 博客园仿真足球竞赛平台的物理模型以及球员命令的分析
10. 深入理解博客园仿真足球竞赛平台的仿真周期
积分与排名
积分 - 129813
排名 - 303
最新评论
1. re: 在VS2005下安装Boost 1.33
我按照上面的步骤做了,可到了第四步,执行批处理文件“build.bat”会执行不下去,报错为:不应有\utilities\bin\x86.不知是怎么回事?? (magician0303)
2. re: 基于silverlight 1.0的中国象棋游戏
@真见
对的,需要拖到棋子才能移动。
谢谢您的夸奖。 (逖靖寒)
3. re: 基于silverlight 1.0的中国象棋游戏
(真见)
4. re: 基于silverlight 1.0的中国象棋游戏
@逖靖寒
我指的移位就是拖动了,,下班了回去下来瞧瞧,顺便也把我那个RC0的runtime换过来。。你真是个人才啊。 (真见)
5. re: 基于silverlight 1.0的中国象棋游戏
@真见
可以将军,所有的象棋规则都实现了。你可以下载下来自己运行。注意,要用sl2.0的runtime。
你指的“移位的效果”是什么意思? (逖靖寒)
阅读排行榜
1. 人工神经网络入门(1) —— 单层人工神经网络应用示例(4014)
2. 释放你的编程技能与激情--博客园仿真足球竞赛平台预览(3074)
3. C#实现遗传算法,模拟花朵的进化。(2924)
4. 使用NAnt构建入门(2822)
5. 如何高效地判断奇数和偶数(2744)
评论排行榜