#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为降序 ....这个怎么用装饰器来实现呢???