算法基础之插入排序

插入排序算法对于少量元素的排序是一个有效的算法。

可以将其看作是大家排序一手扑克牌,开始时我们的左手为空,然后每次从牌堆里拿出一张牌并且按照一定顺序插入左手中正确位置,为了得到这个正确位置,我们需要从右到左将其与已在手中的每张牌进行对比。


伪代码表示

INSERTION-SORT(A)
for i = 1 to A.length
    temp = A[i]
    j = i - 1;
    while j > 0 and A[j] > temp
        A[j + 1] = A[j]
        j = j - 1
    A[j + 1] = temp

笔者在这里先说明一下,A为数组A[1…n],长度为n的待排序数组,伪代码根据不同的编译语言最后写出的结果有所不同,笔者仅展示Java编写的代码。

Java代码

public static int[] sort(int[] queue) {
        if (queue == null || queue.length < 2) {
            return queue;
        }
        int temp;
        for (int i = 1; i < queue.length; i++) {
            for (int j = i; j > 0; j--) {
                if (queue[j] < queue[j - 1]) {
                    temp= queue[j];
                    queue[j] = queue[j - 1];
                    queue[j - 1] = temp;
                }
            }
        }
        return queue;

排序过程大致为:

数组编号012345
初始状态524613
第一次排序254613
第二次排序245613
第三次排序245613
第四次排序124563
第五次排序123456

插入排序的时空复杂度

1、时间复杂度,在最坏情况下,数组完全逆序,插入第2个元素时要考察前1个元素,插入第3个元素时,要考虑前2个元素,……,插入第N个元素,要考虑前N-1个元素。因此,最坏情况下的比较次数是 1 + 2 + 3 + … + (N - 1),等差数列求和,结果为 N^2 / 2,所以最坏情况下的复杂度为 O(N^2)
2、时间复杂度,在最好情况下,数组已经是有序的,每插入一个元素,只需要考查前一个元素,因此最好情况下,插入排序的时间复杂度为O(N)
3、插入排序算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1)


以上,就是笔者对于插入排序的初略见解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值