python - 我必须提供参数 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 重写代码?
解决方案
制作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)
推荐阅读
- javascript - 在 Observable 上使用 await 时,我应该使用什么来代替 toPromise()?
- node.js - 无法读取 cookie 中未定义的属性“程序”?
- angular - Angular 5 - 检查服务器错误
- c# - C#获取xml文档中的所有节点但忽略嵌套节点
- postgresql - Postgres-xl 上的 PostGIS 扩展
- java - Jboss EAP 7.0.9 中的 RichFaces 4.3.7:IllegalStateException
- ios - 如何更快地优化将视频保存到相册?
- matlab - 读取每第 n 行数据,读取条件后的所有行
- algorithm - 是否有稀疏编辑距离算法?
- javascript - 具有多个精确单击处理程序的 Vue 元素在使用系统修饰符单击时始终执行 click.exact 方法