Python 快速排序在第一个分区后不起作用
我花了好几个小时试图编写我的第一个快速排序算法,但仍然没有得到正确的结果。目标是编写一个快速排序代码来对数组进行排序。我想使用两个函数:递归函数quick_sort和分区函数 我发现分区函数似乎在分治生成的每个子数组上都正常工作,但返回的总数组在第一个分区后似乎没有改变(第一个分区有效果,而第二个、第三个分区……似乎没有效果) 我一定错过了什么,有什么提示吗Python 快速排序在第一个分区后不起作用,python,quicksort,Python,Quicksort,我花了好几个小时试图编写我的第一个快速排序算法,但仍然没有得到正确的结果。目标是编写一个快速排序代码来对数组进行排序。我想使用两个函数:递归函数quick_sort和分区函数 我发现分区函数似乎在分治生成的每个子数组上都正常工作,但返回的总数组在第一个分区后似乎没有改变(第一个分区有效果,而第二个、第三个分区……似乎没有效果) 我一定错过了什么,有什么提示吗 def partition(a, first, last): x = a[0] j = 0 for
def partition(a, first, last):
x = a[0]
j = 0
for i in range((first+1), (last+1)):
if x >= a[i]:
j = j + 1
a[i], a[j] = a[j], a[i]
a[0], a[j] = a[j], a[0]
return j
def quicksort(a):
quick_sort(a, 0, len(a) - 1)
def quick_sort(a, first, last):
if first < last:
j = partition(a, first, last)
# devide a into two parts and do quicksort respectively
quicksort(a[:j])
quicksort(a[j+1:])
return a
a = [6.5, 4, 2, 3, 9, 8, 9, 4, 7, 6, 1]
quicksort(a)
def分区(第一个、最后一个):
x=a[0]
j=0
对于范围内的i((第一个+1),(最后一个+1)):
如果x>=a[i]:
j=j+1
a[i],a[j]=a[j],a[i]
a[0],a[j]=a[j],a[0]
返回j
def快速排序(a):
快速排序(a,0,len(a)-1)
def快速排序(a、第一、最后):
如果第一次<最后一次:
j=分区(a,第一个,最后一个)
#将a分成两部分,分别进行快速排序
快速排序(a[:j])
快速排序(a[j+1:]
归还
a=[6.5,4,2,3,9,8,9,4,7,6,1]
快速排序(a)
更换此
quicksort(a[:j])
quicksort(a[j+1:])
为了
由于您调用的是快速排序(a)这将只执行第一次迭代,因此您始终将低和高设置为第一次迭代,因此为了保留它,您应该使用j调用递归一次
quicksort(a[:j])
quicksort(a[j+1:])
为了
由于您正在调用快速排序(a)这将只执行第一次迭代,因此您始终将低和高设置为第一次迭代,因此为了保留它,您应该使用j调用递归排序,a[:j]是不同的数组,一个副本。您应该使用快速排序(a,first,j),快速排序(a,j+1,last),这正是我错过的地方!非常感谢UmNyobea[:j]是不同的数组,一个副本。您应该使用快速排序(a,first,j),快速排序(a,j+1,last),这正是我错过的地方!非常感谢,巫师