Python快速排序类代码优化:如何仅传入一次arr参数实现功能
代码修改实现方案
核心修改点
- 给
quicksort方法设置默认参数arr=None,外部无参调用时自动使用初始化阶段存入实例的self.arr,无需重复传参 - 替换原递归逻辑中的全局实例变量
sor为self,符合类封装规范,避免依赖全局变量导致的运行异常 - 可选优化:删除原逻辑中的
del arr[0]操作,改为遍历arr[1:],避免修改原始数组产生副作用
改写后完整代码
class Sorting: def __init__(self, arr): self.arr = arr def quicksort(self, arr=None): # 外部无参调用时使用实例存储的数组 if arr is None: arr = self.arr.copy() # 不需要保留原数组可以去掉copy() if len(arr) <= 1: return arr else: pivot = arr[0] items_greater = [] items_lower = [] # 直接遍历下标1之后的元素,无需修改原数组 for item in arr[1:]: if item > pivot: items_greater.append(item) else: items_lower.append(item) return self.quicksort(items_lower) + [pivot] + self.quicksort(items_greater) arr = [4,3,2,1,-5,-89,10] sor = Sorting(arr) # 仅初始化时传了一次arr,调用排序方法无需再传参 print(sor.quicksort())
运行输出
和原代码输出完全一致:[-89, -5, 1, 2, 3, 4, 10]
内容的提问来源于stack exchange,提问作者Umesh N
相关产品推荐
相关产品推荐

