有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

排序Java中的简单插入排序

我编写了一个简单的插入排序程序,但输出不正确

class InsertionSort{
    public static void main(String h[]){
    int[] a = {5,4,3,2,1};
    int i,j,temp;
        for(i=1;i<a.length;i++){
            j = i-1; 
            while(i>0 && a[j] > a[i]){
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
        for(int x=0; x<a.length;x++){
            System.out.println(a[x]);   
        }
    }
}

共 (4) 个答案

  1. # 1 楼答案

    public static int[] doInsertionSort(int[] input) {
        int reverse;
        for (int i = 1; i < input.length; i++) {
            for (int j = i; j > 0; j--) {
    
                System.out.println("compare " + input[j - 1] + " to " + input[j]);
    
                if (input[j] < input[j - 1]) {
                    reverse = input[j];
                    System.out.println("Reverse: "+ reverse);
    
                    input[j] = input[j - 1];
                    input[j - 1] = reverse;
    
                    new printNumbers(input);
                }
            }
        }
        return input;
    }
    
     printNumbers(int[] input) {
    
        for (int i = 0; i < input.length; i++) {
    
            System.out.print(input[i] + ", ");
        }
        System.out.println("\n");
    }
    
  2. # 2 楼答案

    我们可以使用游标遵循简单的方法。请在下面找到

    public static void insertionSort(int[] elements) {
        for(int i=1;i<elements.length;i++) {            
            int cursor = i;
            for(int j=i;j>=0;j--) {
                if(elements[j]>elements[cursor]) {
                    int temp = elements[j];
                    elements[j] = elements[cursor];
                    elements[cursor] = temp;                    
                    cursor = j;                 
                }
    
            }
        }
    }
    

    请让我知道你的反馈,这样从myside改进是非常有帮助的

  3. # 3 楼答案

    非常简单的方法

    public static void main(String[] args) {
        int[] array = {100, 12, 31, 5, 4, 3, 2, 1};
    
        for (int i = 1; i < array.length; i++) {
            for (int j = i; j > 0; j--) {
                if (array[j - 1] > array[j]) {
                    int temp = array[j];
                    array[j] = array[j - 1];
                    array[j - 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }
    
  4. # 4 楼答案

    在外循环的顶部,数组排序在元素i下面。您不想将i移回数组中。在内部循环j中,通过反复切换下一个数组,将从i开始的新元素向下移动到排序数组中

    for (i = 1; i < a.length; i++){
        for (j = i; j > 0 && a[j-1] > a[j]; j--){
            temp = a[j];
            a[j] = a[j-1];
            a[j-1] = temp;
        }
    }