具有两个用于排序的参数的最小堆的实现 [Java]
Implementation of min Heap with two parameters for sorting [Java]
我正在尝试在 java 中实现一个基于两个参数排序的最小堆。最小堆的每个元素都是一个包含 int 和 string 的对象。我当前的实现仅基于整数进行排序,但我还需要它按字母顺序排序。例如,如果对象的内容如下:
{(停止,3),(任何地方,1),(食物,17),(得到,3),(完成,1)}
从堆中移除元素时的输出必须是:
{(任何地方,1),(完成,1),(得到,3),(停止,3),(食物,17)}
我的下沉和游泳功能描述如下:
private void swim(int n){
while (n > 1 && greater(n/2, n)){
exchange(n, n/2);
n = n/2;
}
}
private boolean greater(int i, int j){
return elements[i].getValue() >= elements[j].getValue();
}
private void exchange(int i, int j){
Node tmp = elements[i];
elements[i] = elements[j];
elements[j] = tmp;
}
private void sink(int k){
while(2*k <=n){
int i = 2*k;
if(i < n && greater(i, i+1)) i++;
if(!greater(k,i)) break;
exchange(k,i);
k = i;
}
}
如有任何帮助,我们将不胜感激!
更新
非常感谢@AlbertoSinigaglia,您的解决方案成功了!
你只需要这样更新greater
方法:
return /*1*/ elements[i].getValue()>elements[j].getValue
||
/*2*/ (elements[i].getValue()==elements[j].getValue() && elements[i].getString().compareTo(elements[j].getString())>0)
使用 1 检查 int 值是否更大,如果是,那么到此结束,否则它应该是 o =
或 <
我们需要处理=
的情况,所以如果值相等,那么我们将 String 与 compareTo()
方法进行比较,如果第一个 String 大于 return >0
第二个字符串
我正在尝试在 java 中实现一个基于两个参数排序的最小堆。最小堆的每个元素都是一个包含 int 和 string 的对象。我当前的实现仅基于整数进行排序,但我还需要它按字母顺序排序。例如,如果对象的内容如下:
{(停止,3),(任何地方,1),(食物,17),(得到,3),(完成,1)}
从堆中移除元素时的输出必须是:
{(任何地方,1),(完成,1),(得到,3),(停止,3),(食物,17)}
我的下沉和游泳功能描述如下:
private void swim(int n){
while (n > 1 && greater(n/2, n)){
exchange(n, n/2);
n = n/2;
}
}
private boolean greater(int i, int j){
return elements[i].getValue() >= elements[j].getValue();
}
private void exchange(int i, int j){
Node tmp = elements[i];
elements[i] = elements[j];
elements[j] = tmp;
}
private void sink(int k){
while(2*k <=n){
int i = 2*k;
if(i < n && greater(i, i+1)) i++;
if(!greater(k,i)) break;
exchange(k,i);
k = i;
}
}
如有任何帮助,我们将不胜感激!
更新
非常感谢@AlbertoSinigaglia,您的解决方案成功了!
你只需要这样更新greater
方法:
return /*1*/ elements[i].getValue()>elements[j].getValue
||
/*2*/ (elements[i].getValue()==elements[j].getValue() && elements[i].getString().compareTo(elements[j].getString())>0)
使用 1 检查 int 值是否更大,如果是,那么到此结束,否则它应该是 o =
或 <
我们需要处理=
的情况,所以如果值相等,那么我们将 String 与 compareTo()
方法进行比较,如果第一个 String 大于 return >0
第二个字符串