【发布时间】:2010-05-28 16:00:14
【问题描述】:
我有一个堆上的操作,一个固定操作。这是代码:
public class Heap {
public static void fixdown (int a[],int k,int n) {
while (2*k<=n) {
int j=2*k;
if (j<n && a[j]<a[j+1]) j++;
if (!(a[k]<a[j])) break;
swap(a,k,j);
k=j;
}
}
public static void main (String[]args) {
int a[]=new int[]{12,15,20,29,23,22,17,40,26,35,19,51};
fixdown(a,1,a.length);
for (int i=0;i<a.length;i++) {
System.out.println(a[i]);
}
}
public static void swap (int a[],int i,int j) {
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
更新:我已经改了,现在没有错误了。
//结果是
12
29
20
40
23
22
17
15
26
35
19
51
【问题讨论】:
-
查看 fixdown 并查看它对那个值的作用。很好地用于单元测试。
-
我建议使用更具描述性的变量名称。它将帮助您避免小错误