插入排序

插入排序将某一个元素(假设为tar,tar=arr[k])插入到它之前的第一个大于它的元素前,如果没有找到比它大的元素,则不进行插入操作;因为这里的操作是插入而不是交换,所以要将tar之前到第一个大于tar的元素均向后移动一格,因此其中使用while循环进行移动操作。

不论递归或者迭代实现的插入排序,它们的流程是相同,都是数组的前两个元素开始操作,过程大致如下:
假设所给排序元素为{5,3,6,9,7,8,1}
每次均找第一个比它大的进行插入操作, 没有找到则不进行操作

第1次 i=1: 3 5
第2次 i=2: 3 5 6
第3次 i=3: 3 5 6 9
第4次 i=4: 3 5 6 7 9
第5次 i=5: 3 5 6 7 8 9
第6次 i=6: 1 3 5 6 7 8 9

插入排序递归实现

    /**
     * 递归实现插入排序
     * 给定一个一维数组,有一个指针指向数组的最后一个元素,每次指针向前移动一次并于下标0~(n-1)进行比较插入迭代,
     * 当发现arr[n]大于前面的元素值时停止,然后使大于arr[n]之后的那一个元素与arr[n]进行交换,
     * 当不断变化的指针等于0(即到第一个元素)时使递归退出
     * @param arr
     * @param k 最大索引值
     */
    static void insertSort(int[] arr,int k) {
        if(k == 0)return;
        //对前k-1个元素进行排序
        insertSort(arr,k-1);
        //把位置k的元素插入到前面的部分
        int x = arr[k];
        int idx = k-1;//好移动k之前的数,
        while(idx >=0 && x<arr[idx]) {
            arr[idx+1] = arr[idx];
            idx--;
        }
        arr[idx+1] = x;//将k的值插入到到在它前面的第一个大于等于arr[k]的前面
    }

插入排序迭代实现

static void insertSort(int[] arr) {
        for(int i=1;i<arr.length;i++) {
            int tar = arr[i];
            int idx = i-1;
            while(idx>=0 && tar<arr[idx]) {
                arr[idx+1]=arr[idx];
                idx--;
            }
            arr[idx+1] = tar;
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值