Python使用二分插入排序竟然比直接插入排序快99倍!



Python使用二分插入排序竟然比直接插入排序快99倍!

之前发布同一个算法,C++竟然比C快8倍!  , 有同学提出是因为C++中使用了二分插入排序,于是用python比较了下两种排序差距有多大。


测试结果如下:


Python insertion sort took time: 1:39:42.448904
Python insertion sort with binary search took time: 0:01:13.263267


代码如下:


import datetime
import bisect

def insertion_sort(l):
    for i in xrange(1, len(l)):
        j = i-1 
        key = l[i]
        while (l[j] > key) and (j >= 0):
           l[j+1] = l[j]
           j -= 1
        l[j+1] = key

def insertion_sort_bin(seq):
    for i in range(1, len(seq)):
        bisect.insort(seq, seq.pop(i), 0, i)

a=[]
for x in range(200000):
	a.append(x)

a.reverse()

start = datetime.datetime.now()
insertion_sort(a)
end = datetime.datetime.now()
print "Python insertion sort took time: %s" % (end-start)

a.reverse()

start2 = datetime.datetime.now()
insertion_sort_bin(a)
end2 = datetime.datetime.now()
print "Python insertion sort with binary search took time: %s" % (end2-start2)


同样是python,算法不一样,速度差百倍!


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为您介绍这几种排序算法。 1. 冒泡排序:它是一种简单的排序算法,通过不断交换相邻的元素来将序列排序。具体来说,它每次比较相邻的两个元素,如果顺序不对就交换它们的位置。重复这个过程直到所有元素都排好序为止。时间复杂度为 O(n^2)。 2. 直接插入排序:它是一种稳定的排序算法,它每次将一个待排序的元素插入到已经排好序的序列中。具体来说,它从第二个元素开始,将其插入到已经排好序的前面的序列中。时间复杂度为 O(n^2)。 3. 折半插入排序:它是一种改进的直接插入排序算法,它通过二分查找的方式来寻找插入位置,从而减少了比较次数。具体来说,它将待排序的元素插入到已经排好序的序列中,但是它是通过二分查找来寻找插入位置的。时间复杂度为 O(n^2)。 4. 简单选择排序:它是一种简单的排序算法,它每次选择一个最小的元素,并将其放到已经排好序的序列的末尾。具体来说,它从第一个元素开始,找到最小的元素并将其放到第一个位置,然后从剩余的元素中找到最小的元素并将其放到第二个位置,以此类推。时间复杂度为 O(n^2)。 5. 排序:它是一种高效的排序算法,它通过分治的方式来将序列分成两个子序列,然后对这两个子序列分别进行排序。具体来说,它选择一个基准元素,将序列分成两个子序列,左边的子序列都比基准元素小,右边的子序列都比基准元素大。然后递归地对左右子序列进行排序。时间复杂度为 O(nlogn)。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值