插入排序之直接插入

2021-06-12  本文已影响0人  木木禾木

原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。
要点:设立哨兵,作为临时存储和判断数组边界之用。

    private static void sortInsert(int[] array) {
        //逐步扩大有序区
        for (int i = 1; i < array.length; i++) {
            int key = array[i];
            //分别为无序区i和有序区j指针
            int j = i - 1;
            //寻找插入位置
            while (j >= 0 && array[j] > key) {
                array[j + 1] = array[j];
                j--;
            }
            //插入元素
            array[j + 1] = key;
            printArray(String.format(Locale.getDefault(), "key = %2d , j = %2d : ", key, j + 1), array);
        }
    }

运行结果:

数组:  55  22  66  33  11  99  77  44  88
插入排序:
key = 22 , j =  0 :   22  55  66  33  11  99  77  44  88
key = 66 , j =  2 :   22  55  66  33  11  99  77  44  88
key = 33 , j =  1 :   22  33  55  66  11  99  77  44  88
key = 11 , j =  0 :   11  22  33  55  66  99  77  44  88
key = 99 , j =  5 :   11  22  33  55  66  99  77  44  88
key = 77 , j =  5 :   11  22  33  55  66  77  99  44  88
key = 44 , j =  3 :   11  22  33  44  55  66  77  99  88
key = 88 , j =  7 :   11  22  33  44  55  66  77  88  99
上一篇下一篇

猜你喜欢

热点阅读