python 插入排序

# -*-coding:utf-8
def InsertSort(list):
    # list = [4,1,9,13,34,26,10,7,4]
    m = len(list)      # 元素个数
    for i in range(m):  # 对每一个元素
        min = i   # 当前元素索引
        for j in range(i+1,m):  # 遍历后面的所有元素,寻找最小的值
            if list[min] > list[j]:   # 如果后面出现比当前值小的元素
                min = j   # 
        # 当前元素与在其后面的最小元素交换位置
        print "----------------------"
        print "比较元素: ",list[i]
        print "交换元素: ",list[min]
        
        tmp = list[i]
        list[i] = list[min]   
        list[min] = tmp
        print list
    return list  
 
if __name__== '__main__':
    list_0 = [4,1,9,13,34,26,10,7,4]
    list_1 = InsertSort(list_0)
    print list_1

算法性能:

1. 待排序的元素个数是n,该算法执行n-1次插入,每次只需一个辅助空间作为元素交换使用;

2. 最好的情况:排序前记录已经按关键码大小有序排列,每趟只需与前面的有序对象序列的最后一个关键码比较一次,无需移动,总的比较次数n-1;

3. 最坏的情况:第i趟时与前面i-1个关键字比较,并且前面i-1个关键字共移动i-1次,加上第i个关键字复制到辅助交换空间,再从辅助空间到有序表的2次移动,一共是i+1;

4. 算法的时间复杂度是O(n**2),空间复杂度是O(1)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值