我的插入排序程序出了什么问题,我该如何解决?

What is wrong with my insertion sort program and how do I fix it?

我已经为这个问题绞尽脑汁好一阵子了,试图制作一个通用的 InsertionSort 算法。 但是,调试失败了,所以我问更有经验的人,我的代码有什么问题? 贾里德。

public static<E extends Comparable<? super E>> void sort( E[] a, int i, int j ) {
    int f; 
    int x; 
    for(x = i+1; x < j; ++x) {
        E temp = a[x];
        for( f = x ;  f >= i && temp.compareTo(a[j]) > 0; --f) {
            a[f] = a[f-1]; 
        }
        a[f] = temp; 
    }    
}

在内部 for 循环中,您正在将当前元素 tempa[j] 进行比较,您应该将其与前一个元素 a[f-1] 进行比较 更改此

for( f = x ;  f >= i && temp.compareTo(a[j]) > 0; --f)

for( f = x ;  f >= i && temp.compareTo(a[f-1]) > 0; --f)

此外,如果 i 为 0 且循环条件为真, a[f]=a[f-1] 会导致 ArrayIndexOutOfBoundsException,所以使用 f>i 而不是 f>=i