首页 > 解决方案 > 我必须提供参数 arr 两次,一次在 Sorting(arr) 中,一次在 quicksort(arr) 中,如何只使用一次 arr 重写代码?

问题描述

class Sorting:
    def __init__(self, arr):
        self.arr = arr
        n = len(arr)

    def quicksort(self,arr):
        if len(arr) <= 1:
            return arr

        else:
            pivot = arr[0]
            del arr[0]

            items_greater = []
            items_lower = []
            for item in arr:
                if item > pivot:
                    items_greater.append(item)
                else:
                    items_lower.append(item)

            return sor.quicksort(items_lower) + [pivot] + sor.quicksort(items_greater)




arr = [4,3,2,1,-5,-89,10]
n = len(arr)
sor = Sorting(arr)
print(sor.quicksort(arr))

输出:[-89, -5, 1, 2, 3, 4, 10]

我必须提供参数 arr 两次,一次是在 Sorting(arr) 中,一次是在 quicksort(arr) 中,如何只使用一次 arr 重写代码?

标签: pythonclassrecursion

解决方案


制作arr一个可选参数,并self.arr在未提供时使用。您只需要在递归调用中显式传递它。

class Sorting:
    def __init__(self, arr):
        self.arr = arr
        n = len(arr)

    def quicksort(self, arr = None):
        if arr is None:
            arr = self.arr

        if len(arr) <= 1:
            return arr

        else:
            pivot = arr[0]
            del arr[0]

            items_greater = []
            items_lower = []
            for item in arr:
                if item > pivot:
                    items_greater.append(item)
                else:
                    items_lower.append(item)

            return sor.quicksort(items_lower) + [pivot] + sor.quicksort(items_greater)

推荐阅读