python 列表的sorted方法与排序算法的差异

一个初学python的小白考虑算法和时间复杂的空间复杂度太远了。

在家看书看到一个小问题说到了冒泡排序,本着急切想了解高大上算法的python小白就去研究了一下

冒泡排序算法:

lis = [9, 6, 8, 7, 5, 3, 1, 2]
for i in range(len(lis)):
    for j in range(len(lis)):
        if a[i] >= a[j]:
pass
else:
lis[i], lis[j] = lis[j], lis[i]
print(lis)

结果如下:
[1, 2, 3, 5, 6, 7, 8, 9]


然后就是python的sroted方法:
print(sroted(lis,reverse=False)

结果如下:
[1, 2, 3, 5, 6, 7, 8, 9]

发现没有,两个方法得到的结果完全一样有木有?一个用了7行代码,而另一个就只有一行代码?我脑子瓦特啦?还用算法,还那么难学

第二天早上就迫不及待的找到导师问了一下:

导师给到的解答是这样的,简单理解来说就是,你就几个数据,用啥方法都行,你要是有巨量的数据你再试试?

然后我还真的找了大量的数据试了一下,π的数据100万位。

然后然后刺激的来了sorted运行时间为:

时间:0.014961004257202148

冒泡排序的运行时间为:

时间:45.61460757255554

what????算法比用sorted方法整整多了四十多秒?

又去网上找了一下sorted的底层实现算法,发现用了一种

归并排序

def merge(left,right):
    merged = []
    i,j = 0,0 left_len,right_len = len(left),len(right) while i<left_len and j<right_len: if left[i] <= right[j]: merged.append(left[i]) i += 1 else: merged.append(right[j]) j += 1 merged.extend(left[i:]) merged.extend(right[j:]) return merged def mergeSort(a): if len(a) <= 1: return a else: mid = len(a) // 2 left = mergeSort(a[:mid]) right = mergeSort(a[mid:]) merge(left,right) return merge(left,right) def main(): a = [59,12,77,64,72,69,46,89,31,9] a1 = mergeSort(a) print(a1) if __name__ == '__main__': main()

看着就比冒泡排序高级好吗?
总的来说,冒泡排序是很基础的排序方式,运算速度还是比较慢的,从上面看到两个方法的时间可以看到算法与算法之间的巨大差异。

同志们加油学习吧,加油,好好学习,天天向上!!!

转载于:https://www.cnblogs.com/wei-yu/p/10286999.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值