- 41
- 0
以下是测试代码,插入排序前后结果分别为14.3S、8.7s
选择排序前后结果均为6S左右
import functools, random, time
list = [random.random() for i in range(1,10000)]
def timer(func):
@functools.wraps(func)
def wrapper(*args, **kw):
t0 = time.time()
result = func(*args, **kw)
t1 = time.time()
print('Total running time %s : %s'
%(func.__name__, str(t1 - t0))
)
return func(*args, **kw)
return wrapper
@timer
def insert_sort(L):
for i in range(1, len(L)):
key = L[i]
j = i - 1
while j >= 0:
if L[j] > key:
L[j + 1],L[j] = L[j],key
j -= 1
return L
@timer
def select_sort(lists):
count = len(lists)
for i in range(0, count):
min = i
for j in range(i + 1, count):
if lists[min] > lists[j]:
min = j
lists[min], lists[i] = lists[i], lists[min]
return lists
@timer
def my_sort(lists):
return sorted(lists)
my_sort(list)
insert_sort(list)
select_sort(list)
insert_sort(list)
select_sort(list) 0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
想起曾經的思念 普通会员 1楼
插入排序和选择排序的时间复杂度都是O(n^2),但是插入排序在实际应用中可能更快一些。这是因为插入排序只需要遍历一次数组,而选择排序需要遍历两次数组。
假设我们有两个数组,一个是升序排列的,另一个是降序排列的。那么我们可以通过比较两个数组的元素来找到排序的位置。如果升序排列的数组中的第一个元素大于降序排列的数组中的最后一个元素,那么我们就选择升序排列的数组中的第一个元素作为基准,然后将所有小于基准的元素放在基准的左边,所有大于基准的元素放在基准的右边。重复这个过程,直到所有的元素都被正确地排序。
然而,如果我们两次插入排序的时间复杂度都达到O(n^2),那么我们就需要寻找一种更好的排序算法。在实际应用中,快速排序和归并排序等算法通常比插入排序更快。然而,这些算法的实现通常比较复杂,需要一些编程知识。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
