用python写的一个简单二叉树排序类
#coding:utf-8 max_val = [99999999,-99999999] class Mysort(object): "Mysort to sort a int array" def __init__(self,List): self.mylist = List self.bs = '' self.Dict ={0:min,1:max} self.select = '' def buildTree(self,rt,L,R):#树一棵二叉树,每个节点维护当前子树的最小值(最大值) mid = (L + R) // 2 if(L==R): self.bs[rt] = self.mylist[L] else: self.buildTree(rt*2,L,mid) self.buildTree(rt*2+1,mid+1,R) self.bs[rt] = self.Dict[self.select](self.bs[rt*2],self.bs[rt*2+1]) return self.bs[rt] def get_updata(self,rt,L,R):#每调用一次,则返回最小值(最大值),并将这个值所在的位置置为最小值(最大值) mid = (L + R) // 2 ans = '' if(L==R): ans = self.bs[rt] self.bs[rt] = max_val[self.select] return ans if(self.bs[rt]==self.bs[rt*2]): ans = self.get_updata(rt*2, L, mid) else: ans = self.get_updata(rt*2+1, mid+1, R) self.bs[rt] = self.Dict[self.select](self.bs[rt*2],self.bs[rt*2+1]) return ans def sort_begin(self,sel = 0):#调用这个函数就可以对传进来的数组进行排序,并返回排好的结果 self.bs = [max_val[sel] for i in range(len(self.mylist)*4+10)] if(len(self.mylist)==0): return [] self.select = sel self.buildTree(1, 0, len(self.mylist)-1) return [self.get_updata(1, 0, len(self.mylist)-1) for i in self.mylist] array = [9999,1, 2, 5, 3, 6, 8, 4, 10, 123] mysort = Mysort(array) print mysort.sort_begin(0)#0为升序 print mysort.sort_begin(1)#1为降序 ....这个怎么用装饰器来实现呢???