Python 快速排序递归

Python 快速排序递归,python,quicksort,Python,Quicksort,我正在尝试跟踪这种快速排序算法: 但是有一组不同的数字-[6,2,8,4,3,7,10] 一旦对算法的左侧进行排序,我就可以了,但之后我就不理解递归类了 左侧完成且start=0和end=0后,将运行以下行: quicksort(myList, pivot+1, end) 当我从快速排序功能打印出起始值和结束值时: Start = 2 and End = 1 Start = 3 and End = 2 Start = 4 and End = 6 我不明白开始和结束如何更改为这些值 P>

我正在尝试跟踪这种快速排序算法:

但是有一组不同的数字-
[6,2,8,4,3,7,10]

一旦对算法的左侧进行排序,我就可以了,但之后我就不理解递归类了

左侧完成且
start=0
end=0
后,将运行以下行:

 quicksort(myList, pivot+1, end)
当我从快速排序功能打印出起始值和结束值时:

Start = 2 and End = 1
Start = 3 and End = 2
Start = 4 and End = 6
我不明白
开始
结束
如何更改为这些值


<> P>可能有人解释如何和为什么?

你可以考虑快速排序的一种更容易的实现方式。比如说,

my_list = [52,8,45,43,6,56,76,36,54,12,34,98,41,30]

def quicksort(arr):
    high = []
    low = []
    pivot_list = []

    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[0]
        for i in arr:
            if i < pivot:
                low.append(i)
            elif i > pivot:
                high.append(i)
            else:
                pivot_list.append(i)
        high = quicksort(high)
        low = quicksort(low)

    return low + pivot_list + high

print quicksort(my_list)

[6, 8, 12, 30, 34, 36, 41, 43, 45, 52, 54, 56, 76, 98]

然后我们在“低”和“高”分区上运行这个快速排序函数。例如,对于高分区,
pivot=arr[0]=56
。我们遍历高分区,如果元素小于枢轴(56),我们将其放入一个新的低分区组,该低分区组是高分区的一个子组。如果元素大于56,那么我们把它放在一个新的高分区中,它是高分区的一个子组。您可以把它看作是从一个列表开始,我们希望对其进行排序,然后将其分支为一个高分区和一个低分区,然后每个分区都分支为各自的高分区和低分区。这就是递归出现在

中,您可能会考虑快速排序的实现。比如说,

my_list = [52,8,45,43,6,56,76,36,54,12,34,98,41,30]

def quicksort(arr):
    high = []
    low = []
    pivot_list = []

    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[0]
        for i in arr:
            if i < pivot:
                low.append(i)
            elif i > pivot:
                high.append(i)
            else:
                pivot_list.append(i)
        high = quicksort(high)
        low = quicksort(low)

    return low + pivot_list + high

print quicksort(my_list)

[6, 8, 12, 30, 34, 36, 41, 43, 45, 52, 54, 56, 76, 98]
然后我们在“低”和“高”分区上运行这个快速排序函数。例如,对于高分区,
pivot=arr[0]=56
。我们遍历高分区,如果元素小于枢轴(56),我们将其放入一个新的低分区组,该低分区组是高分区的一个子组。如果元素大于56,那么我们把它放在一个新的高分区中,它是高分区的一个子组。您可以把它看作是从一个列表开始,我们希望对其进行排序,然后将其分支为一个高分区和一个低分区,然后每个分区都分支为各自的高分区和低分区。这就是递归的作用