用快速排序的原理自定义多级排序函数

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)]
>>> 
原文地址:https://www.cnblogs.com/xiangnan/p/3383407.html