算法:插入排序

元素右移,没有交换操作;
基本操作:元素移动;

插入排序:一趟排序,子集合是有序的。


插入排序过程图


代码实现:

    /**
     * 使用递归方式实现插入排序
     *
     * @param ins
     * @param targetIndex
     */
    public static void insertionSort(int[] ins, int targetIndex) {
        if (targetIndex == ins.length) {
            return;
        }
        int targetInt = ins[targetIndex];
        int index = targetIndex;
        for (int i = targetIndex - 1; i >= 0; i--) {
            if (targetInt < ins[i]) {
                ins[i + 1] = ins[i];
                index = i;
            } else {
                break;
            }
        }
        if (index != targetIndex) {
            ins[index] = targetInt;
        }
        insertionSort(ins, ++targetIndex);

    }

    /**
     * 不用递归方式实现插入排序
     *
     * @param ints
     */
    public static void insertionSort2(int[] ints) {
        int num = 1;
        while (num < ints.length) {
            int outInt = ints[num];
            int targetIndex = num;
            for (int i = num - 1; i >= 0; i--) {
                if (outInt < ints[i]) {
                    ints[i + 1] = ints[i];
                    targetIndex = i;
                } else {
                    break;
                }
            }
            ++num;
            if (targetIndex != num) {
                ints[targetIndex] = outInt;
            }
        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值