直接插入排序

上一篇写了技术基数排序,这节是关于插入排序!

插入排序的思想十分简单,打扑克牌的时候我们给牌放位置的方法就是直接插入排序。

首先我们拿到第一张牌的时候 例如 8,这个时候它是第一张,所以不需要比较,可以确定暂时的位置是0 (数组的下标从0开始,在这里就用0了)。然后拿到了一张 5,这个时候把5与前面的牌像比较,5 < 8,所以5应该插到8的前面去,8应该往后移动一位。此时在【0】的位置上是5,在【1】的位置上是8,之后我们拿到了 9,与前面的牌相比较是有序的,所以不需要做调整,9的位置就是【2】,然后我们又拿到了7此时,与前面的数值一一比较,从前往后找到第一个大于7的数字,该牌的位置就是7应该在的位置,那么此时【1】位置上换成7,8和9依次向后移动一位。【2】的位置上是8, 【3】的位置是9。然后我们拿到牌之后都是按照这个方法来调整即可。

下面是实现的代码:

public class InsertSort implements Sort {

    public static void main(String[] s) {
        Sort sort = new InsertSort();
        int arr[] = {-12, 5, 6, -5, -5, 569, 125, -58, 9, 36};
        sort.sort(arr);
    }


    @Override
    public void sort(int[] arr) {

        for (int i = 1; i < arr.length; i++) {
            int insertPosition = -1;
            int cache = arr[i]; //缓存当前的值

            //从前面排好序的数字中间找到第一个大于当前数字的,它的位置就是当前数字应该在的位置。
            for (int m = 0; m < i; m++) {
                if (arr[i] < arr[m]) {
                    insertPosition = m;
                    break;
                }
            }

            //如果找到了了,就把数字依次往后移动一位。
            if (insertPosition != -1) {
                for (int j = i; j > insertPosition && insertPosition != -1; j--) {
                    arr[j] = arr[j - 1];
                }
                // 把当前数字放到腾出来的位置上去。
                arr[insertPosition] = cache;
            }

            for (int el : arr) {
                System.out.print(el + " ");
            }
            System.out.println();

        }
    }
}

直接插入排序是稳定的,我们从前往后排序的时候,两个相同的值先出现的必定排在后出现的前面。

最后算法的时间复杂度上是O(n^2)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值