Algorithm in Java.
BlogJava
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
posts - 1, comments - 0, trackbacks - 0
<
2008年9月
>
日
一
二
三
四
五
六
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
9
10
11
常用鏈接
我的隨筆
我的評論
我的參與
留言簿
(1)
給我留言
查看公開留言
查看私人留言
隨筆檔案
2008年9月 (1)
搜索
最新評論
JAVA實現的Heap
@SuppressWarnings(
"
unused
"
)
public
class
MyHeap
{
private
static
final
int
MAX_SIZE
=
1001
;
private
int
CUR_SIZE;
private
Comparable[] DATA;
public
MyHeap()
{
CUR_SIZE
=
0
;
DATA
=
new
Comparable[ MAX_SIZE
+
1
];
}
public
MyHeap( Comparable [] items )
{
CUR_SIZE
=
items.length;
DATA
=
new
Comparable[ items.length
+
1
];
for
(
int
i
=
0
; i
<
items.length; i
++
)
DATA[ i
+
1
]
=
items[ i ];
buildHeap();
}
public
void
insert( Comparable x )
{
if
( CUR_SIZE
+
1
==
DATA.length )
doubleArray( );
//
Percolate up
int
hole
=
++
CUR_SIZE;
DATA[
0
]
=
x;
for
( ; x.compareTo( DATA[ hole
/
2
] )
<
0
; hole
/=
2
)
{
DATA[ hole ]
=
DATA[ hole
/
2
];
}
DATA[ hole ]
=
x;
}
public
Comparable findMin( )
{
return
DATA[
1
];
}
public
Comparable deleteMin( )
{
Comparable minItem
=
findMin( );
DATA[
1
]
=
DATA[ CUR_SIZE
--
];
percolateDown(
1
);
return
minItem;
}
private
void
buildHeap( )
{
for
(
int
i
=
CUR_SIZE
/
2
; i
>
0
; i
--
)
percolateDown( i );
}
public
boolean
isEmpty( )
{
return
CUR_SIZE
==
0
;
}
public
int
size( )
{
return
CUR_SIZE;
}
public
void
makeEmpty( )
{
CUR_SIZE
=
0
;
}
private
void
percolateDown(
int
hole )
{
int
child;
Comparable tmp
=
DATA[ hole ];
for
( ; hole
*
2
<=
CUR_SIZE; hole
=
child )
{
child
=
hole
*
2
;
if
( child
!=
CUR_SIZE
&&
DATA[ child
+
1
].compareTo( DATA[ child ] )
<
0
)
child
++
;
if
( DATA[ child ].compareTo( tmp )
<
0
)
DATA[ hole ]
=
DATA[ child ];
else
break
;
}
DATA[ hole ]
=
tmp;
}
private
void
doubleArray( )
{
Comparable [] newArray;
newArray
=
new
Comparable[ DATA.length
*
2
];
for
(
int
i
=
0
; i
<
DATA.length; i
++
)
newArray[ i ]
=
DATA[ i ];
DATA
=
newArray;
}
}
posted on 2008-09-02 15:51
水牛♂Toto
閱讀(215)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
BlogJava
Copyright ©2025 水?!酺oto
主站蜘蛛池模板:
神木县
|
高邮市
|
县级市
|
会昌县
|
兰考县
|
大同市
|
郧西县
|
临城县
|
吉安县
|
重庆市
|
余姚市
|
晋宁县
|
华池县
|
桃园市
|
永登县
|
开鲁县
|
江阴市
|
大同市
|
通道
|
尼勒克县
|
连城县
|
滦南县
|
敦煌市
|
彭州市
|
鸡东县
|
彭水
|
衡南县
|
额济纳旗
|
满洲里市
|
津南区
|
洪江市
|
若羌县
|
岳普湖县
|
广汉市
|
邢台县
|
白山市
|
确山县
|
育儿
|
铁岭县
|
平和县
|
安陆市
|