Java 插入排序算法将最大的数字带到底部
我正在对一堆数字进行插入排序,但我就是不能把我的脑袋放在上面。我很确定“j=I-1”是错误的,还有很多其他的东西,如果你们能指出我的错误,我会非常感激,这样我就能纠正它们Java 插入排序算法将最大的数字带到底部,java,algorithm,sorting,insertion-sort,Java,Algorithm,Sorting,Insertion Sort,我正在对一堆数字进行插入排序,但我就是不能把我的脑袋放在上面。我很确定“j=I-1”是错误的,还有很多其他的东西,如果你们能指出我的错误,我会非常感激,这样我就能纠正它们 public class temp { public static void main(String[] args) { int numbrid[] = {2, 5, 9, 7, 1, 4, 3, 8, 6}; System.out.println("before:"); int i, j, k;
public class temp {
public static void main(String[] args) {
int numbrid[] = {2, 5, 9, 7, 1, 4, 3, 8, 6};
System.out.println("before:");
int i, j, k;
for (i = 0; i < numbrid.length; i++) {
System.out.println(numbrid[i]);
}
//sorting
System.out.println("after:");
for (i = 1; i < numbrid.length; i++) {
j = i - 1;
while (numbrid[i] < numbrid[j]) {
k = numbrid[i];
numbrid[i] = numbrid[j];
numbrid[j] = k; // swaps their places
}
}
for ( i = 0; i < numbrid.length; i++ ) {
System.out.println(numbrid[i]);
}
}
}
公共类临时{
公共静态void main(字符串[]args){
int numbrid[]={2,5,9,7,1,4,3,8,6};
System.out.println(“之前:”);
int i,j,k;
对于(i=0;i
编辑:这只不过是取了最大的数字并将其排到了底部您的
for
循环中的一些问题:
),因此您必须在进入时将该值分配给临时变量
for (i = 1; i < numbrid.length; i++) {
k = numbrid[i];
numbridj + 1] = k;
for
循环变为:
...
for (i = 1; i < numbrid.length; i++) {
k = numbrid[i];
j = i - 1;
while ((j > -1) && (numbrid[j] > k)) {
numbrid[j + 1] = numbrid[j];
j--;
}
numbrid[j + 1] = k;
}
...
。。。
对于(i=1;i-1)和&(numbrid[j]>k)){
numbrid[j+1]=numbrid[j];
j--;
}
numbrid[j+1]=k;
}
...
我看到两个错误:
- 您不能交换
和j
元素,而是交换i
和j
j+1
- 您忘记了减小
j
oooh@PopoFibo:(好吧,无论如何我会发布…您的排序算法实现是错误的。看看伪代码——您应该能够相对轻松地将其转换为Java。
...
for (i = 1; i < numbrid.length; i++) {
k = numbrid[i];
j = i - 1;
while ((j > -1) && (numbrid[j] > k)) {
numbrid[j + 1] = numbrid[j];
j--;
}
numbrid[j + 1] = k;
}
...