Java 正在寻找有关堆数据结构实现的帮助
我有一个堆上的操作,一个修复操作。代码如下:Java 正在寻找有关堆数据结构实现的帮助,java,algorithm,arrays,Java,Algorithm,Arrays,我有一个堆上的操作,一个修复操作。代码如下: 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;
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;
}
}
a[j]=k代码>
您可能想要:
a[j]=t代码>
关于数组声明
请不要养成这样声明数组的习惯:
int x[];
您应该将括号与类型而不是标识符放在一起:
相关问题
-
- 这些声明会导致
i
的不同类型李>
你有
a[j]=k代码>
也许它应该是a[j]=t代码>在当前缩进状态下,代码很难读取,但我相信a[j]=k;
应该是a[j]=t代码>这些行:
for (int i=0;i<a.length;i++){
System.out.println(a[i]);
a[0]
的左边子级是a[1]
,右边子级是a[2]
如果参数n是包含堆的数组的长度,则需要修复一些条件
while(2*k<=n){
while(2*k查看fixdown,看看它在这一个值上做了什么。这是单元测试的一个很好的用途。我建议使用更多描述性变量名。这将帮助您避免一些小错误Lygene润滑剂请查看我的输出,我确信它是正确的,但您可以建议我或检查吗?关于:数组-我个人使用类型[]ident;
对于我的声明,我确实看到有人引用它是“约定”,您是否愿意详细说明它背后的原理?我碰巧是以“正确的方式”选择它的,但我看不出阻止它的逻辑原因。您也可以将right描述为rightchild=leftchild+1^^
for (int i=0;i<a.length;i++){
System.out.println(a[i]);
leftchild_index = 2*i+1;
rightchild_index = 2*i+2; // rightchild_index = leftchild_index + 1
while(2*k<=n){
while(2*k + 1 < n){
int j=2*k;
if (j<n && a[j]<a[j+1]) j++;
int j = 2 * k + 1;
if (j < n - 1 && a[j] < a[j+1]) j++;