Python 快速排序在第一个分区后不起作用

Python 快速排序在第一个分区后不起作用,python,quicksort,Python,Quicksort,我花了好几个小时试图编写我的第一个快速排序算法,但仍然没有得到正确的结果。目标是编写一个快速排序代码来对数组进行排序。我想使用两个函数:递归函数quick_sort和分区函数 我发现分区函数似乎在分治生成的每个子数组上都正常工作,但返回的总数组在第一个分区后似乎没有改变(第一个分区有效果,而第二个、第三个分区……似乎没有效果) 我一定错过了什么,有什么提示吗 def partition(a, first, last): x = a[0] j = 0 for

我花了好几个小时试图编写我的第一个快速排序算法,但仍然没有得到正确的结果。目标是编写一个快速排序代码来对数组进行排序。我想使用两个函数:递归函数quick_sort和分区函数

我发现分区函数似乎在分治生成的每个子数组上都正常工作,但返回的总数组在第一个分区后似乎没有改变(第一个分区有效果,而第二个、第三个分区……似乎没有效果)

我一定错过了什么,有什么提示吗

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),这正是我错过的地方!非常感谢,巫师