首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速排序回收

快速排序回收
EN

Stack Overflow用户
提问于 2017-02-23 14:22:49
回答 1查看 2.5K关注 0票数 1

我试图跟踪这个快速排序算法:

https://pythonschool.net/data-structures-algorithms/quicksort/

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

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

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

代码语言:javascript
复制
 quicksort(myList, pivot+1, end)

当我从快速排序函数打印开始值和结束值时:

代码语言:javascript
复制
Start = 2 and End = 1
Start = 3 and End = 2
Start = 4 and End = 6

我不明白startend是如何转换成这些值的。

有人能解释一下怎么做和为什么吗?

EN

回答 1

Stack Overflow用户

发布于 2017-02-23 15:12:14

您可能会考虑更容易地实现快速排序。例如,

代码语言:javascript
复制
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]

这个相当简单的实现很容易解释。您将基于对枢轴的任意选择对列表进行分区。在这种情况下,arr[0] = 52。然后遍历列表,如果元素大于枢轴(52),则将其放入“high”分区,如果小于52,则将其放入“low”分区。在这一点上,经过一次运行(在我们运行high = quicksort(high)之前),我们已经

代码语言:javascript
复制
low = [8, 45, 43, 6, 36, 12, 34, 41, 30]
high = [56, 76, 54, 98]
pivot_list = [52]

然后,我们在'low‘和'high’分区上运行这个快速排序函数。例如,对于高分区,pivot = arr[0] = 56。我们迭代高分区,如果元素小于枢轴(56),我们将其放入一个新的低分区组中,即高分区的一个子组。如果元素大于56,那么我们将其放入一个新的高分区,即高分区的一个子组中。您可以将其看作是从一个列表开始,我们希望对其进行排序,并将其划分为一个高分区和一个低分区,然后每个分区都划分为它们自己的高分区和低分区。这就是递归出现的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42418398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档