Python实现经典排序算法--插入排序

    上一次讲到了冒泡排序算法在Python中的实现,现在来讲一下另一个经典算法,插入排序。

    有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。以下是用Python实现经典插入排序的code。

def insertsort(list): 
    if list!=None: 
        if len(list)==1: 
            pass 
        else: 
            for i in range(1,len(list)): 
                for j in range(i): 
                    if list[j]>list[i]: 
                        list[j],list[i]=list[i],list[j] 
list1=[2,1,1,8,4]                         
insertsort(list1) 
print(list1) 

    在代码中,我们可以看到,在这里我们同样使用了顶层循环和底层循环的双循环机制。首先,我们先来看看底层循环,这里的循环变量是j,而顶层循环i的取值范围{1,n-1}(假设排序对应的序列有n个元素),激活函数是将第i+1个元素与第i+1个元素之前的元素做比较,如果第前者小于被比较的元素,则做换位处理,否则,不做处理;顶层循环是控制循环次数,共计n-1次,当循环到n-1次时,最后一个元素要与前面n-1个已经排列好的元素进行比较,总计比较次数为n*(n-1)/2;每一层顶层循环,都会在{1,i+1}中完成一次排序,后面i+2个元素插入到前面i+1个元素的末尾,在进行排序,故称之为插入排序。

下面来具体看一下每次顶层循环和底层循环计算机对列表操作的返回值:

def insertsort(list): 
    if list!=None: 
        if len(list)==1: 
            pass 
        else: 
            for i in range(1,len(list)): 
                print ('[',i,']')
                for j in range(i): 
                    if list[j]>=list[i]: 
                        list[j],list[i]=list[i],list[j] 
                        print ('"',list,'"')
                    else:
                        print("+",list,"+")
            print('*',list,'*')
list1=[5,4,3,2,1]                         
insertsort(list1) 
print(list1) 

其结果为:

[ 1 ]
" [4, 5, 3, 2, 1] "
[ 2 ]
" [3, 5, 4, 2, 1] "
" [3, 4, 5, 2, 1] "
[ 3 ]
" [2, 4, 5, 3, 1] "
" [2, 3, 5, 4, 1] "
" [2, 3, 4, 5, 1] "
[ 4 ]
" [1, 3, 4, 5, 2] "
" [1, 2, 4, 5, 3] "
" [1, 2, 3, 5, 4] "
" [1, 2, 3, 4, 5] "
* [1, 2, 3, 4, 5] *
[1, 2, 3, 4, 5]
 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值