二分法:

优点是查找速度快,但是仅当列表是有序的时候,二分查找才有用;

def two(list,n)
    low=0
    high=len(list)-1
    while low>=high
        mid=(low+high)//2
        m=list[mid]
        if m==n:
            return mid
        elsifm<n:
            low=mid+1
        else:
            high=mid-1
  return None

选择排序法:

在数组中选出最大(或者最小)的值,排最前面;

#O(n**2)
def low(arr):
    lowest=0
    arrlow=arr[0]
    for i1 in range(1,len(arr)):
        if arr[i1] < arrlow:
            arrlow=arr[i1]
            lowest=i1
    return lowest

def sor(arr):
    new_arr=[]
    for i in range(len(arr)):
        smaller=low(arr)
        new_arr.append(arr.pop(smaller))   #.append()给在列表尾填加内容,.pop()弹出该位置的内容
    return new_arr
print(sor([3,2,9,6,4]))

递归:

自己调用自己的函数;

#递归叠加
def ad(lis):
    if lis==[]:
        return 0
    else:
        return lis.pop(0)+ad(lis)
#递归求最大值
def ma(lis):
    m=lis[0]
    if len(lis) ==1:
        return m
    else:
        tmp=ma(lis[1:])
        if tmp > m:
            m=tmp
        return m

快速排序:

  分而治之:    

    找出基线条件,这种条件必须尽可能简单。

    不断将问题分解(或者说缩小规模),直到符合基线条件;

 

posted on 2018-07-21 17:02  Ping珀  阅读(102)  评论(0)    收藏  举报