直接插入排序 Python实现

直接插入排序(Straight Insertion Sort)

基本思想

  • 往已有的有序序列中插入需要排序的值
  • 已排序完毕的数列是有序的
  • 将第一个元素看做一个有序的序列,从第二个元素开始一直往前插入排序
  • 每次插入得到元素个数加1的新序列
  • 如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,保证插入排序是稳定
def insert_sort(arr):
    n = len(arr)
    for i in range(1,n):# 如果大于arr[i-1]就就直接插在最后开始下一个
        if arr[i]<arr[i-1]: #将第i个元素与前一个已排好序列的最后一个比较
            j = i - 1
            temp = arr[i] # 记录当前待排序的元素
            arr[i] = arr[i-1] # 将待排序元素向前移动一位
            while temp<arr[j] and j>=0: # 判断待排序元素与前一位的大小,由于Python的列表存在负索引,这里要判断j>=0
                arr[j+1] = arr[j] #元素后移
                j = j -1 
            arr[j+1] = temp # 插入
        showarr(arr,i) # 打印每一趟排序的结果


def showarr(arr,i):
    print("第"+str(i)+"次:",end='')
    n = len(arr)
    for j in range(n):
        print(arr[j],end=' ')
    print('\n')


def test():
    arr = [4,6,2,3,6,7,8,1,16,5]
    insert_sort(arr)

if __name__ == '__main__':
    test()

每次比较的时候与前面排好序的序列的最后一个元素开始比较,比它大就开始下一个排序,比它小则继续往前比较,找到>=的位置插入

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值