我的插入排序程序出了什么问题,我该如何解决?
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 循环中,您正在将当前元素 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
我已经为这个问题绞尽脑汁好一阵子了,试图制作一个通用的 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 循环中,您正在将当前元素 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