python - 为什么内置的 .sort() 函数比手动编码的排序算法更有效?
问题描述
我在 python 中编写了关于这个问题的代码,但我的问题涉及所有编程语言。
我生成了 10,000,000 个随机数据点,并通过快速排序对它们进行了排序。
在我的电脑上,大约需要 57 秒。
然后,我生成了另外 10,000,000 个数据点,并使用内置.sort()
函数对它们进行了排序,大约需要 4 秒。
为什么差距这么大?.sort()
该函数使用什么排序算法?
我会假设使用的排序算法.sort()
是快速排序,对吗?
我使用的快速排序算法如下(不是我的代码,我用它来快速测试这个)。
import numpy as py
array = np.random.normal(100, 5, 10000000)
def partition(arr,low,high):
i = ( low-1 )
pivot = arr[high]
for j in range(low , high):
if arr[j] <= pivot:
i = i+1
arr[i],arr[j] = arr[j],arr[i]
arr[i+1],arr[high] = arr[high],arr[i+1]
return ( i+1 )
def quickSort(arr,low,high):
if low < high:
pi = partition(arr,low,high)
quickSort(arr, low, pi-1)
quickSort(arr, pi+1, high)
quickSort(array, 0, len(array)-1)
print("done")
解决方案
Python 默认TIM SORT
用作排序技术。
推荐阅读
- java - 如何更新现有的 MongoDB 集合验证?
- performance-testing - 处理协调遗漏的 OpenCensus 指标和统计数据
- c# - 拆分日志文件行 c#
- android - java.lang.NoClassDefFoundError: 解析失败: Landroid/app/job/JobInfo$TriggerContentUri;
- database - 如何在关系代数中表达“无信息”?
- semantic-mediawiki - SMW #ask 查询结果格式图
- android - Firebase 写入/发送数据 Android
- linux - 在打印数组后添加新行
- error-handling - Setter 方法不起作用,而 Getter 方法工作正常
- python - Selenium 适用于 python2 但不适用于 python3