Java 插入排序算法将最大的数字带到底部

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;

我正在对一堆数字进行插入排序,但我就是不能把我的脑袋放在上面。我很确定“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;
    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
循环中的一些问题:

  • 插入每次迭代只需使用1个输入(对于,外部的
    ),因此您必须在进入
    时将该值分配给临时变量

    for (i = 1; i < numbrid.length; i++) {
      k = numbrid[i];
    
  • 将临时值指定给数组中的下一个元素

    numbridj + 1] = k;
    
  • 继续你的for循环

  • 因此,您的
    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;
    }
    ...