zoukankan      html  css  js  c++  java
  • 用快速排序的原理自定义多级排序函数

    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)]
    >>> 
  • 相关阅读:
    Less(27a)GET
    Less(27)GET
    虚拟机打开文件黑屏
    mysql开放远程连接权限
    fidder如何设置代理转发
    如何获取APK的包名
    ADB调试原理之通俗版本
    adb端口5037被占用怎么办
    ADB调试原理
    如何使用无线调试手机
  • 原文地址:https://www.cnblogs.com/xiangnan/p/3383407.html
Copyright © 2011-2022 走看看