插入排序

# 插入排序

# 平均时间复杂度    O(n^2)
# 最好情况         O(n)
# 最坏情况         O(n^2)
# 空间复杂度        O(1)

# 算法描述:
# (1) 从第一个元素开始,该元素可以认为已经被排序;
# (2) 取出下一个元素,在已经排序的元素序列中从后向前扫描;
# (3) 如果该元素(已排序)大于新元素,将该元素移到下一位置;
# (4) 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
# (5) 将新元素插入到该位置后;
# (6) 重复步骤2~5。


# 例子:[2, 1, 7, 4, 5]
# [1, 2, 7, 4, 5]
# [1, 2, 7, 4, 5]
# [1, 2, 4, 7, 5]
# [1, 2, 4, 5, 7]


# python实现
def Insert_sort(lists):
    # 获取lists的总长度
    count = len(lists)

    for i in range(1, count):  # 假设第一个数是排序好的
        key = lists[i]  # 取出当前未排序的数
        j = i - 1  # 从后往前,先去未排序数的前一个数

        # 若当前未排序的数比比排序好的数还小,并且没有到数组的开头
        while j >= 0 and lists[j] > key:
            lists[j + 1] = lists[j]  # 排序好的数往后挪一个位置
            j = j - 1  # 取排序好的前一个数进行比较
        lists[j + 1] = key  # 插入当前要排序的数
        print(lists)
    return lists


if __name__ == "__main__":
    lists = [2, 1, 7, 4, 5]
    print(Insert_sort(lists))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值