Java程序-使用For循环进行插入排序

时间:2019-05-12 07:39:30

标签: java arrays insertion-sort

我已经编写了一个用于插入排序的Java程序。

public class InsertionSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int arr[] = { 12, 11, 13, 5, 6 };

        int len = arr.length;

        for(int i=0;i<len-1;i++) {

            for(int j=i+1;j<len;j++) {

                if(arr[j] < arr[i]) {
                    int temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
        }
        for(int i=0;i<len;i++) {
            System.out.print(arr[i]+ " ");
        }

    }

}

请让我知道以上程序是否正确,并且是执行插入排序的正确方法。我得到正确的输出。

2 个答案:

答案 0 :(得分:1)

如果您尝试在每次j循环迭代之后使用来打印New数组

System.out.println(Arrays.toString(arr))

这将导致以下陈述,其中分析为注释 //插入排序从索引1的元素开始,因为它会比较数字的左侧
,并且在每次排序之后,当前值左侧的所有元素都将在先前的迭代中进行排序

[11, 12, 13, 5, 6] // correct since 11 < 12
[11, 12, 13, 5, 6] //correct since 12 < 13
[5, 12, 13, 11, 6] //5 has changed its position which is correct but also Here you can //see the position of 11 changed
[5, 12, 13, 11, 6]
[5, 12, 13, 11, 6]
[5, 11, 13, 12, 6] 
[5, 6, 13, 12, 11] 
[5, 6, 12, 13, 11]
[5, 6, 11, 13, 12]
[5, 6, 11, 12, 13]

尝试下面的代码

public static void main(String[] args)  {
        int arr[] = { 12, 11, 13, 5, 6 };
        int len = arr.length;
        for(int i=1; i<len; i++) {
            int key = arr[i];
            for (int j=i-1; (j >= 0 && arr[j] > key); j--) { 
                arr[j + 1] = arr[j];  
            } 
            arr[j + 1] = key;
            System.out.println(Arrays.toString(arr));
        }
    }

它将为您提供以下输出

[11, 12, 13, 5, 6]
[11, 12, 13, 5, 6]
[5, 11, 12, 13, 6]
[5, 6, 11, 12, 13]

来源https://www.geeksforgeeks.org/insertion-sort/

答案 1 :(得分:0)

这是正确的,但不是插入排序。您写的是Bouble Sort。

插入排序看起来像这样:

public class InsertionSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int arr[] = { 12, 11, 13, 5, 6 };

        int len = arr.length;

        for(int i=0;i<len-1;i++) {

        int max_idx = i

            for(int j=i+1;j<len;j++) {

                if(arr[max_idx] < arr[j]) {
                    max_idx = j
                }
            }

            if (i != max_idx) {
                int temp = arr[max_idx];
                arr[max_idx] = arr[i];
                arr[i] = temp;
            }
        }
        for(int i=0;i<len;i++) {
            System.out.print(arr[i]+ " ");
        }

    }

}

顺便说一下,Java集合有自己的sort方法,该方法更快。