插入排序

插入排序原址排序输入的数,算法在数组A中重排这些数,

在任何时候,最多只有常数个数字存储在数组外部。

插入排序是原地排序,基本无需外部空间。

从第二个元素开始,依次遍历全部数组。

其中,前半截为已排好的有序数组而后半截为待排序的无序数组。

每个元素从后向前依次对比,直到找到自己的位置。

插入排序是稳定排序。

def insert_sort(list1):
    for j in range(1, len(list1)):  #从第2个元素开始遍历,依次将元素放在指定位置
        key = list1[j]    #记录当前值
        i = j - 1         #将当前值从当前位置之前逆序依次比较
        while i>=0 and list1[i]>key:  #如果当前值小于之前值,则说明当前值位于之前值的前面
            list1[i+1] = list1[i]   #将大于当前值的元素依次后移一位,给当前值留位置
            i -= 1
        list1[i+1] = key   #将当前值插入在第一个小于它的值的后面
    return list1


if __name__ == "__main__":
    list1 = [3,2,4,5,6,7]
    list2 = ["wang", "zhe", "tian", "jin", "da", "xue"]
    ordered_list1 = insert_sort(list1)
    ordered_list2 = insert_sort(list2)
    print ordered_list1 #[2, 3, 4, 5, 6, 7]
    print ordered_list2 #['da', 'jin', 'tian', 'wang', 'xue', 'zhe']


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WangZhe0912

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值