算法导论之算法基础(三)

插入排序

类比:如果你会玩斗地主,那么摸牌后按从小到大插入,你这样插入的过程就是插入排序

程序:在程序中的玩法就像有一个人发牌,发齐了再拿牌,也就是一开始你就有17张牌,这17张牌对应17个元素的数组。你从第二种牌开始进行调动,如果第二张牌比第一张牌小,那么就把第二张牌抽出来,然后把第一张牌放入到第二张牌的位置,再把抽出的牌放到第一张牌的位置,那么前两张牌就排好了;就是这样依次类推的过程就是我们程序实现的原理。

代码如下:

    public static void insertionSort(int[] a) {
        //以免重复计算数组的长度
        int len = a.length;
        //从第二个元素开始进行操作
        for (int i=1; i<len; i++) {
            //把这种元素提出来
            int key = a[i];
            int j = i -1;
            //去获取提出元素的上一个元素,如果比提出元素大,则将这个元素往后移一位,依次类推
            while (j >=0 && a[j] > key) {
                a[j+1] = a[j];
                j--;
            }
            /*通过上面的循环就得到一个空的位置,前面的做法就是先把本来的位置放空,
              然后把当前的位置减一,那么放回去的时候就是将当前位置加一就得到放空的位置了*/
            a[j+1] = key;
        }
    }

算法复杂度:O(n^{2})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值