Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 需要帮助我了解一种快速排序的实现吗_Python_Python 3.x_Quicksort - Fatal编程技术网

Python 需要帮助我了解一种快速排序的实现吗

Python 需要帮助我了解一种快速排序的实现吗,python,python-3.x,quicksort,Python,Python 3.x,Quicksort,我对python很陌生,一直在努力自学。自从我发现了排序算法,我就一直在试图去了解它们,特别是快速排序。我在stackoverflow上找到了一个quicksort的实现,但有一部分特别让我感到困惑 “返回快速排序(较小)+相等+快速排序(较大)”究竟是如何工作的?如果以递归方式调用quicksort(),那么每次初始化函数时,较小、相等和较大的数组不都会被清除吗?python如何准确地记住有组织的数组?python如何知道停止这种递归 代码来源: def快速排序(数组): 较小的=[] 相等=

我对python很陌生,一直在努力自学。自从我发现了排序算法,我就一直在试图去了解它们,特别是快速排序。我在stackoverflow上找到了一个quicksort的实现,但有一部分特别让我感到困惑

“返回快速排序(较小)+相等+快速排序(较大)”究竟是如何工作的?如果以递归方式调用quicksort(),那么每次初始化函数时,较小、相等和较大的数组不都会被清除吗?python如何准确地记住有组织的数组?python如何知道停止这种递归

代码来源:

def快速排序(数组):
较小的=[]
相等=[]
更大=[]
如果len(阵列)>1:
p=数组[0]
对于阵列中的x:
如果xp:
附加(x)
返回快速排序(较小)+相等+快速排序(较大)#???
其他:
返回数组

该函数每次调用时都会创建3个新数组。尽管它们有相同的名称,但它们实际上是不同的,因为递归调用将函数的所有本地数据(不仅仅是参数)放在堆栈上


因此,当函数调用自身时,上一次调用的3个数组不会丢失。

函数每次调用时都会创建3个新数组。尽管它们有相同的名称,但它们实际上是不同的,因为递归调用将函数的所有本地数据(不仅仅是参数)放在堆栈上


因此,当函数调用自身时,上一次调用的3个数组不会丢失。

递归正在内存(堆栈帧)中创建函数的新实例,包括变量。这些列表由函数清除是正确的,但不是在初始实例中。函数以递归方式产生新分支,并且仅在后续实例完成、关闭并返回其贡献后才关闭初始实例。

递归正在内存(堆栈框架)中创建函数的新实例,包括变量。这些列表由函数清除是正确的,但不是在初始实例中。该函数递归地产生新的分支,并且仅在后续实例完成、关闭并返回其贡献后才关闭初始实例。

每个递归级别都有自己的私有
less
equal
greer
列表。递归停止是因为
len(array)>1
check-
less
greater
至少比输入列表短一个元素,因此在某个级别上,它们的长度降到2以下。这种方法的一个问题是,对于许多级别的递归,几乎整个数组最终都位于本地数组中,除了equal数组,它没有传递到更深层次的递归。为了阐明这一点,函数的多个实例将在每一级递归中调用,而这些级别中的大多数将消耗几乎等于原始数组大小的堆栈空间,除了最深层的递归,其中本地数组只保存原始数组的一小部分。每个递归级别都有自己的私有
较小的
相等的
,和
较大的
列表。递归停止是因为
len(array)>1
check-
less
greater
至少比输入列表短一个元素,因此在某个级别上,它们的长度降到2以下。这种方法的一个问题是,对于许多级别的递归,几乎整个数组最终都位于本地数组中,除了equal数组,它没有传递到更深层次的递归。为了阐明这一点,函数的多个实例将在每一级递归中调用,这些级别中的大多数将消耗几乎等于原始数组大小的堆栈空间,但最深级别的递归除外,其中局部数组将只保留原始数组的一小部分。