我正在为类创建一个程序,它比我老师的实现更快地对2D数组进行排序。
我决定将数据放入BST,然后删除每个最小元素并将其放入新的排序数组中。但是,我一直遇到麻烦所以我用int而不是T写它,当我这样做时程序工作了!
但是,现在我将它转换为使用泛型类型T,它不再正确排序。下面的课程是我写的,并继承了我老师的HybridSort类的方法sort(T [] [] input)。
我相信我的问题在于我处理泛型类型T的方式并将其视为int(我使用x.compareTo(y)因此我不相信这是问题)。如果有必要,我也可以使用int发布我编写的代码。谢谢!
public class ***<T extends Comparable<T>> implements HybridSort<T> {
public class BST {
public T value;
public BST left;
public BST right;
public BST root;
public BST() {
this.value = null;
this.left = null;
this.right = null;
}
public BST(T value, BST left, BST right) {
this.value = value;
this.left = left;
this.right = right;
}
public void insert(T value) {
root = insert(root, new BST(value, null, null));
this.value = root.value;
this.left = root.left;
this.right = root.right;
}
public BST insert(BST parent, BST newIndex) {
if (parent == null) return newIndex;
else if (newIndex.value.compareTo(parent.value) != 1) parent.left = insert(parent.left, newIndex);
else if (newIndex.value.compareTo(parent.value) > 0) parent.right = insert(parent.right, newIndex);
return parent;
}
public T removeMin() {
BST current = root;
BST parent = root;
while (current.left != null) {
parent = current;
current = current.left;
}
parent.left = current.left;
return current.value;
}
}
@SuppressWarnings("unchecked")
public T[] sort(T[][] input) {
BST bst = new BST();
int size = Arrays.stream(input).mapToInt(t -> t.length).sum();
T[] output = (T[])Array.newInstance(input[0][0].getClass(), size);
for (int i = 0; i < input.length; i++) {
for (int j = 0; j < input[0].length; j++) {
bst.insert(input[i][j]);
}
}
for (int i = 0; i < output.length; i++) {
output[i] = (T)(Integer)bst.removeMin();
}
return output;
}
}