import random def randomlist(n): return [random.randint(0,100) for i in range(n)] def isorted(arr,key=None,reverse=False): if len(arr)<2: return arr small=[] big=[] line=arr[0] if key is not None: for ar in arr[1:]: if key(ar)>key(line): big.append(ar) else: small.append(ar) else: for ar in arr[1:]: if ar>line: big.append(ar) else: small.append(ar) if reverse: return isorted(big,key,reverse)+[line]+isorted(small,key,reverse) return isorted(small,key,reverse)+[line]+isorted(big,key,reverse) arr=randomlist(10) print 'raw list:' print arr print 'sorted list 1:' print isorted(arr) print 'sorted list 2:' print isorted(arr,None,1) arr=zip(randomlist(10),randomlist(10)) print 'raw list:' print arr print 'sorted list 1:' print isorted(arr,lambda x:x[0],0) print 'sorted list 2:' print isorted(arr,lambda x:x[1],1)
结果:
>>> raw list: [75, 81, 11, 96, 83, 44, 24, 50, 71, 77] sorted list 1: [11, 24, 44, 50, 71, 75, 77, 81, 83, 96] sorted list 2: [96, 83, 81, 77, 75, 71, 50, 44, 24, 11] raw list: [(58, 27), (76, 21), (32, 17), (3, 76), (73, 64), (74, 24), (3, 32), (24, 74), (18, 11), (9, 53)] sorted list 1: [(3, 32), (3, 76), (9, 53), (18, 11), (24, 74), (32, 17), (58, 27), (73, 64), (74, 24), (76, 21)] sorted list 2: [(3, 76), (24, 74), (73, 64), (9, 53), (3, 32), (58, 27), (74, 24), (76, 21), (32, 17), (18, 11)] >>>