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

时间:2016-06-16 19:27:07

标签: python quicksort

我正在努力编写我的第一个快速排序算法几个小时,但仍然没有做到正确。目标是编写一个快速排序代码来排序数组。我想使用两个函数:递归函数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)

1 个答案:

答案 0 :(得分:2)

替换此

quicksort(a[:j])
quicksort(a[j+1:])

对于

quick_sort(a,first,j-1)
quick_sort(a,j+1,last)

由于你正在调用quicksort(a),这只会在第一次迭代时再次执行,bc你总是将low和high设置为第一次迭代,所以要保留它,你应该使用j来调用递归的