Java-这种排序方法是个谜
我被下面的代码困住了,它应该将一个键/指针组合插入数据结构的一个节点,并将其保持在一个排序的顺序中,但是顺序似乎是随机的,我就是不知道出了什么问题Java-这种排序方法是个谜,java,sorting,methods,Java,Sorting,Methods,我被下面的代码困住了,它应该将一个键/指针组合插入数据结构的一个节点,并将其保持在一个排序的顺序中,但是顺序似乎是随机的,我就是不知道出了什么问题 public void add (int val, Node no) { // Find the index where to insert int maxval = 0; for (int o = 0; o < this.values.length; o++) if (val < this.val
public void add (int val, Node no) {
// Find the index where to insert
int maxval = 0;
for (int o = 0; o < this.values.length; o++)
if (val < this.values[o]) {
maxval = o;
break;
}
// Move all the data from the chosen index one spot forward
for (int o = this.values.length-1; o > maxval; o--) {
this.values[o] = this.values[o-1];
this.children[o] = this.children[o-1];
}
// Insert the value
this.children[maxval] = no;
this.values[maxval] = val;
}
public void add(int val,节点号){
//查找要插入的索引
int maxval=0;
for(int o=0;omaxval;o--){
this.values[o]=this.values[o-1];
this.children[o]=this.children[o-1];
}
//插入值
this.children[maxval]=否;
此.values[maxval]=val;
}
一个问题是,如果val
大于所有当前值,则最终得到maxval=0
。您可以通过将maxval
初始化为values.length-1
来解决此问题,首先可能是
另一个问题是,实际上您正在丢失
值[values.length-1]
的原始值-它被先前的值覆盖,但没有任何内容将该值复制到其他位置。这里需要的行为是什么?一个问题是,如果val
大于所有当前值,那么最后的结果是maxval=0
。您可以通过将maxval
初始化为values.length-1
来解决此问题,首先可能是
另一个问题是,实际上您正在丢失
值[values.length-1]
的原始值-它被先前的值覆盖,但没有任何内容将该值复制到其他位置。这里想要的行为是什么?啊,是的,这一定是答案!,我只需要在方法的开头添加一个if语句,而且,当当前节点已满时,不会访问代码中调用该方法的点,因此这不是问题所在。谢谢我刚刚将if(val值初始化maxval
[values.length-1]
(最大值的索引)而不是通过values.lengh-1
?@denisk:不,因为maxval
实际上是新值的索引,而不是值。但是如果有大小()
included…我认为建议的更改应该可以。啊,是的,这一定是答案!我只需在方法的开头添加一个if语句,而且,当当前节点已满时,不会访问代码中调用方法的点,因此这不是问题。谢谢!我刚刚更改了if(val值初始化maxval
[values.length-1]
(最大值的索引)而不是通过values.lengh-1
?@denisk:不,因为maxval
实际上是新值的索引,而不是一个值。但是如果涉及size()
的话,它会发生变化……我认为建议的更改应该可以。插入一个值将被丢弃(覆盖)最大值。这就是目的吗?java中有可用的排序集。您不需要自己实现它。插入值将丢弃(覆盖)最大值。这就是目的吗?java中有可用的排序集。您不需要自己实现它。