java - 对通用类型的数组进行排序

标签 java generics casting

我正在尝试对遗传类型数组实现合并排序算法。问题是结果不正确,因为某些元素被设置为 0。我怀疑问题来自于我在整个程序中所做的转换,但我不知道确切的原因。

正如您在 sortUsingMerge() 中看到的,我将一个对象数组转换为通用数组。同样在下面的 IF 语句中,我将数组中的 Object 元素转换为 int 以便能够比较 2 个元素。我的意图是排序算法应该适用于任何类型的任何数组,但我只是暂时不想为每种类型编写比较器。

Input array: 5 1 -2 3 7 8 0
Output: -2 0 1 1 3 7 0

看起来数字 5 和 8 在排序过程中以某种方式转换为不同的数字。有人可以告诉我为什么吗?谢谢!

Source code:

public void sortUsingMerge(){
    Object[] array = (E[]) new Object[size];
    Object[] helper = (E[]) new Object[size];

    mergeSort(array,helper,0,size-1);

}
 public void mergeSort(Object[] array, Object[] helper, int low, int high){

       if (low<high){ 

            int mid = (low + high)/2;

            mergeSort(array,helper,low,mid); //sort left half
            mergeSort(array,helper,mid+1,high);//sort right half
            merge(array,helper,low,mid,high);

        }
}
public void merge(Object[] array, Object[] helper, int low, int mid, int high){

    for (int i=low; i<=high; i++){// copy both parts into helper array
        helper[i] = array[i];
    }

    int helperLeft = low;
    int helperRight = mid + 1;
    int current = low;

    while (helperLeft <= mid && helperRight <=high){

        if ((int)helper[helperLeft] <= (int)helper[helperRight]){
            array[current] = helper[helperLeft];
            helperLeft++;
        }
        else{
            array[current] = helper[helperRight];
            helperRight++;
        }

        current++;
    }


    int remain = mid - helperLeft;
    for (int i=0; i<remain; i++){
        array[current+i] = helper[helperLeft + i];
    }


}

最佳答案

内部合并替换

    for (int i=0; i<remain; i++){
     array[current+i] = helper[helperLeft + i];
    }

    while (helperLeft <= mid) {
        array[current] = helper[helperLeft];
        current++;
        helperLeft++;
    }

关于java - 对通用类型的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20159643/

相关文章:

java - Eclipse崩溃

c# - 从不明确的新声明中获取可能的泛型类型列表

java - ApplicationBinder 中泛型类型的 JAX-RS Bind 实现

c# - 从 C# 中的单个方法返回多个类型

java - 将子类转换为等于父类(super class)时转换失败

java - 尝试运行客户端时出现 EJB 异常

java - 无法从 Internet Explorer 动态 Web 表内的下拉列表中选择值

java - JAVA/J2EE 中的组合生成器

java - 是否存在带有类型参数的泛型(generics with generics)?

android - 如何解决对重载定义的不明确引用