以下两种方法的区别是什么?只有一行代码差异

时间:2015-07-29 08:42:36

标签: python sorting

我正在尝试一个简单的快速排序。但是,我有两个几乎相同的方法(partition1& partition2)。两者之间的唯一区别是一行代码,特别是在解决方案1中,我在交换后使用i = li+=1。或者,在解决方案2中,我使用i = l-1。有人能告诉我他们为什么表现得如此不同?

解决方案1:

     def partition1(x, l, r):
        tmp = x[r]
        i = l
        j = l
        while j<= r -1:
            if x[j] <= tmp:
                x[j], x[i] = x[i], x[j]
                i+=1
            j+=1
        x[i+1], x[r] = x[r], x[i+1]
        return i+1

解决方案2:

    def partition2(x, l, r):
        tmp = x[r]
        i = l-1
        j = l
        while j<= r -1:
            if x[j] <= tmp:
                i+=1
                x[j], x[i] = x[i], x[j]
            j+=1
        x[i+1], x[r] = x[r], x[i+1]
        return i+1

实际的排序功能:

    def quicksort(x, left, right):
        if left < right:
            p = partition1(x, left, right)
            if left < p:
                quicksort(x, left, p-1)
            if p < right:
                quicksort(x, p+1, right)

    arr =[12, 0, 9, 1, 8, 22, 10, 45, 32, 33, 40]
    print quicksort(arr, 0, len(arr)-1)

1 个答案:

答案 0 :(得分:1)

这是因为,在while之后,i位于解决方案2中最后一次交换的位置,但在解决方案1中更进了一步。

要在解决方案1中修复它,您必须将最后两行更改为:

x[i], x[r] = x[r], x[i]
return i