procedure cluster(S, k)        /*将数据集S聚类成为k个簇*/
begin
1.   T := build_kd_tree(S)    /*对应数据集S建立一个K-DTree T*/
2.   Q := build_heap(S)       /*对应数据集S建立一个堆Q*/
3.   while size(Q) > k do {   /*聚类直至簇的个数为k */
4.          u := extract_min(Q)      /*找到最近的两个簇u,v */
5.          v := u.cloest
6.          delete(Q, v)
7.          w := merge(u, v)          /*将u,v合并为簇w */
8.          delete_rep(T, u);delete_rep(T, v);insert_rep(T, w)
9.          w.cloest := x               /* x is an arbitrary cluster in Q*/
10.         for each x∈Q do{ /*调节因合并带来的T和Q的变化*/
11.                if (dist(w,x) < dist(w,w.cloest))
12.                       w.cloest := x
13.                if x.cloest is either u or v {
14.                       if dist(x, x.cloest) < dist(x.w)
15.                           x.cloest := cloest_cluster(T, x, dist(x,w))
16.                       else
17.                              x.cloest := w
18.                       relocate(Q, x)
19.                }
20.                else if dist(x, x.cloest) > dist(x, w) {
21.                       x.cloest := w
22.                       relocate(Q, x)
23.                }
24.         }
25.         insert(Q, w)
26.  }
end