zoukankan      html  css  js  c++  java
  • 零星

    常用算法

    # 二分查找
    @cal_time
    def bin_search(li, val):
        low = 0
        high = len(li)-1
        while low <= high: # 只要候选区不空,继续循环
            mid = (low + high) // 2
            if li[mid] == val:
                return mid
            elif li[mid] < val:
                low = mid + 1
            else: # li[mid] > val
                high = mid - 1
        return -1
    
    @cal_time
    def sys_search(li, val):
        try:
            return li.index(val)
        except:
            return -1
    
    li = list(range(0,20000000,2))
    
    sys_search(li, 20000001)
    def _quick_sort(li, left, right): #快速排序方法1
        if left < right: # 待排序的区域至少有两个元素
            mid = partition(li, left, right)
            _quick_sort(li, left, mid-1)
            _quick_sort(li, mid+1, right)
    
    @cal_time
    def quick_sort(li):
        _quick_sort(li, 0, len(li)-1)
    
    
    def partition(li, left, right):
        tmp = li[left]
        while left < right:
            while left < right and li[right] >= tmp:
                right -= 1
            li[left] = li[right]
            while left < right and li[left] <= tmp:
                left += 1
            li[right] = li[left]
        li[left] = tmp
        return left

    def _quick_sort2(li):#快速排序方法2
        if len(li) < 2:
            return li
        tmp = li[0]
        left = [v for v in li[1:] if v <= tmp]
        right = [v for v in li[1:] if v > tmp]
        left = _quick_sort2(left)
        right = _quick_sort2(right)
        return left + [tmp] + right
    
    import copy
    
    li = list(range(100000))
    random.shuffle(li)
    li2 = copy.copy(li)
    quick_sort(li)
    quick_sort2(li2)
    # 最好情况O(n) 平均情况O(n^2) 最坏情况O(n^2)
    
    @cal_time
    def bubble_sort(li):
        for i in range(len(li)-1):  # i表示第n趟 一共n或者n-1趟
            exchange = False
            for j in range(len(li)-i-1): # 第i趟 无序区[0, n-i-1]  j表示箭头 0~n-i-2
                if li[j] > li[j+1]:
                    li[j], li[j+1] = li[j+1], li[j]
                    exchange = True
            if not exchange:
                break
    
    
    li = list(range(10000))
    random.shuffle(li)
    bubble_sort(li)
  • 相关阅读:
    WAF绕过方法
    ”非常危险“的Linux命令
    CSRF--花式绕过Referer技巧
    安卓手机的后门控制工具SPADE
    基于RedHat发行的Apache Tomcat本地提权漏洞
    SQL注入--宽字节注入
    MySQL提权
    CF1067D. Computer Game(斜率优化+倍增+矩阵乘法)
    CF1063F. String Journey(后缀数组+线段树)
    BZOJ4732. [清华集训2016]数据交互(树链剖分+线段树+multiset)
  • 原文地址:https://www.cnblogs.com/dingyunfeng/p/10714250.html
Copyright © 2011-2022 走看看