Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么内置的.sort()函数比手动编码的排序算法更有效?_Python_Sorting_Quicksort - Fatal编程技术网

Python 为什么内置的.sort()函数比手动编码的排序算法更有效?

Python 为什么内置的.sort()函数比手动编码的排序算法更有效?,python,sorting,quicksort,Python,Sorting,Quicksort,我用python编写了关于这个问题的代码,但我的问题涉及所有编程语言 我生成了10000000个随机数据点,并使用快速排序对它们进行排序 在我的电脑上,花了大约57秒 然后,我又生成了10000000个数据点,并使用内置的.sort()函数对它们进行排序,耗时约4秒 为什么差异如此之大?.sort()函数使用什么排序算法 我假设.sort()使用的排序算法是快速排序,对吗 下面是我使用的快速排序算法(不是我的代码,我用它来快速测试) 将numpy导入为py 数组=np.随机.正常(100,510

我用python编写了关于这个问题的代码,但我的问题涉及所有编程语言

我生成了10000000个随机数据点,并使用快速排序对它们进行排序

在我的电脑上,花了大约57秒

然后,我又生成了10000000个数据点,并使用内置的
.sort()
函数对它们进行排序,耗时约4秒

为什么差异如此之大?
.sort()
函数使用什么排序算法

我假设
.sort()
使用的排序算法是快速排序,对吗

下面是我使用的快速排序算法(不是我的代码,我用它来快速测试)

将numpy导入为py
数组=np.随机.正常(100,510000)
def分区(arr、低、高):
i=(低-1)
枢轴=arr[高]
对于范围内的j(低、高):

如果arr[j]Python默认使用
TIM SORT
作为排序技术


您可以从

中获得很多信息。默认情况下,Python使用
TIM SORT
作为排序技术的一种工具


你可以从

中获得很多信息,Python是一个不好的研究案例,因为内置/模块函数很可能是用C编写并编译成机器代码的,而Python代码需要解释,这通常要慢几个数量级。是的,C。一般来说,比较C代码和Python代码就像比较保时捷和自行车一样。即使你走同样的路线,保时捷也可能更快到达那里。因此,如果我将代码编译成.exe,速度也会一样?@Chessnut你无法将Python代码编译成机器代码(在某种程度上,除了
numby
cython
等例外)。您需要使用C之类的编译语言编写。但即使这样,我也希望库的实现通常会更快,因为人们通常会花时间优化它们。这很有意义,感谢大家的帮助!Python是一个糟糕的研究案例,因为内置/模块函数很可能是用C编写并编译成机器代码的,而Python代码需要解释,这通常要慢几个数量级。是的,C。一般来说,比较C代码和Python代码就像比较保时捷和自行车一样。即使你走同样的路线,保时捷也可能更快到达那里。因此,如果我将代码编译成.exe,速度也会一样?@Chessnut你无法将Python代码编译成机器代码(在某种程度上,除了
numby
cython
等例外)。您需要使用C之类的编译语言编写。但即使这样,我也希望库的实现通常会更快,因为人们通常会花时间优化它们。这很有意义,感谢大家的帮助!
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")