在这个问题上已经开了很长时间,试图制作一个通用的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;
}
}
答案 0 :(得分:0)
在内部for循环中,您要将当前元素temp
与a[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