【Java-算法】-插入排序

1.什么是插入排序

根据当插入位置index,与index左侧有序数组区逐个比对,比temp大的元素,向右移动, 如果小于则停止比对,跳出当前循环,最后插入临时元素,因为之前的循环 index 之前的数组已经是有序数组。

2.算法代码实现

 /**
     * 插入排序
     * 根据当插入位置index,与index 前有序数组区逐个比对,比temp大的元素,向右移动,
     * 如果小于则停止比对,跳出当前循环,因为之前的循环 index 之前的数组已经是有序数组。
     * @param arr
     */
    public static void insertSort_1(int[] arr){
        for (int i = 1; i < arr.length; i++) {
            //保存插入位数据
            int temp = arr[i];
            //插入元素位置
            int insertIndex = i;
            //对比待插入index前已完成排序的元素,找到temp 位置
            int orderLength = i-1;
            for (int j = orderLength; j >=0; j--) {
                System.out.printf("insertSort_1 ==> 内循环比较次数:" + j + "\n\r");
                if(arr[j] > temp){
                    //大于临时值,向右移动到空出插入位置
                    arr[j+1] = arr[j];
                    //移动完,空出来的index
                    insertIndex = j;
                }else {
                    break;
                }
            }
            //插入临时元素
            if(insertIndex !=i){
                arr[insertIndex] = temp;
            }
            System.out.printf("insertSort_1 ==> arr:" + Arrays.toString(arr) + "\n\r");
        }
    }

输出打印

insertSort_1 ==> 内循环比较次数:0
insertSort_1 ==> arr:[1, 4, 2, 5, 7, 9, 3, 21, 10]
insertSort_1 ==> 内循环比较次数:1
insertSort_1 ==> 内循环比较次数:0
insertSort_1 ==> arr:[1, 2, 4, 5, 7, 9, 3, 21, 10]
insertSort_1 ==> 内循环比较次数:2
insertSort_1 ==> arr:[1, 2, 4, 5, 7, 9, 3, 21, 10]
insertSort_1 ==> 内循环比较次数:3
insertSort_1 ==> arr:[1, 2, 4, 5, 7, 9, 3, 21, 10]
insertSort_1 ==> 内循环比较次数:4
insertSort_1 ==> arr:[1, 2, 4, 5, 7, 9, 3, 21, 10]
insertSort_1 ==> 内循环比较次数:5
insertSort_1 ==> 内循环比较次数:4
insertSort_1 ==> 内循环比较次数:3
insertSort_1 ==> 内循环比较次数:2
insertSort_1 ==> 内循环比较次数:1
insertSort_1 ==> arr:[1, 2, 3, 4, 5, 7, 9, 21, 10]
insertSort_1 ==> 内循环比较次数:6
insertSort_1 ==> arr:[1, 2, 3, 4, 5, 7, 9, 21, 10]
insertSort_1 ==> 内循环比较次数:7
insertSort_1 ==> 内循环比较次数:6
insertSort_1 ==> arr:[1, 2, 3, 4, 5, 7, 9, 10, 21]

3.总结

  • 时间复杂度 -O(n^2)
  • 最好情况 - O(n^2)
  • 最坏情况 - O(n^2)
  • 空间复杂度 - 只有一个交换临时变量temp,O(1)
  • 稳定算法(保证重复元素的相对位置一致)
posted @ 2022-01-10 21:58  贪吃的蚂蚁  阅读(44)  评论(0)    收藏  举报