Python 不排序下半部分的快速排序

Python 不排序下半部分的快速排序,python,algorithm,quicksort,Python,Algorithm,Quicksort,我是一名编程新手,正在尝试Udacity的快速排序实践。但我的代码并不能完全做到这一点 我在快速排序函数中分配low和high的方式可能有问题,但我不知道如何修复它 # this returns a sorted array def quicksort(array): low = 0 high = len(array) - 1 if low >= high: return array pi = partition(array, low, hi

我是一名编程新手,正在尝试Udacity的快速排序实践。但我的代码并不能完全做到这一点

我在快速排序函数中分配low和high的方式可能有问题,但我不知道如何修复它

# this returns a sorted array
def quicksort(array):
    low = 0
    high = len(array) - 1
    if low >= high:
        return array
    pi = partition(array, low, high)
    array[:pi-1] = quicksort(array[:pi-1])
    array[pi+1:] = quicksort(array[pi+1:])
    return array

# this places the pivot in the right position in the array.
# all elements smaller than the pivot are moved to the left of it.    
def partition(array, low, high):
    border = low
    pivot = array[high]
    for i in range(low, high):
        if array[i] <= pivot:
            array[border], array[i] = array[i], array[border]
            border += 1
    array[border], array[high] = array[high], array[border]
    return border

test = [21, 4, 1, 3, 9, 20, 25, 6, 21, 14]
print quicksort(test)
#返回一个排序数组
def快速排序(数组):
低=0
高=透镜(阵列)-1
如果低>=高:
返回数组
pi=分区(数组、低、高)
数组[:pi-1]=快速排序(数组[:pi-1])
数组[pi+1:]=快速排序(数组[pi+1:])
返回数组
#这会将轴放置在阵列中的正确位置。
#所有小于轴的图元都将移动到轴的左侧。
def分区(阵列、低、高):
边界=低
枢轴=阵列[高]
对于范围内的i(低、高):

如果数组[i]要获得数组的下半部分,需要执行
array[:pi]
而不是
array[:pi-1]
。结束索引是独占的。如果将行更改为:

array[:pi] = quicksort(array[:pi])

您的算法有效:

要获得数组的下半部分,您需要执行
数组[:pi]
而不是
数组[:pi-1]
。结束索引是独占的。如果将行更改为:

array[:pi] = quicksort(array[:pi])
您的算法有效: